在django中将表单数据之外的数据添加到数据库中

Adding data in addition to form data to database in django

我目前在将数据保存到数据库时遇到问题。我打算做的是我有一个 ip 字段表示 ip 地址和其他一些字段。这些其他字段将使用 ModelForm 添加到数据库中。当提交表单时,IP 地址与表单数据一起保存。但是当我进入我的管理页面时,ip 字段是空的。

model.py

class Restaurant(models.Model):
    ip = models.CharField(max_length=45)
    name = models.CharField(max_length=100)
    owner = models.CharField(max_length=100)
    city = models.CharField(max_length=50)
    state = models.CharField(max_length=50)
    zipcode = models.CharField(max_length=6)

forms.py

class RestaurantForm(forms.ModelForm):
    class Meta:
        model = Restaurant
        fields = ('name', 'owner', 'city', 'state', 'zipcode',)
        labels = {
            'name': _('Name of restaurant'),
            'owner': _('Owner name'),
            'zipcode': _('Zip Code'),
        }

views.py

def content(request):
    if request.method == "POST":
            form = RestaurantForm(request.POST)
            if form.is_valid:
                form.save(commit=False)
                ip_address = get_client_ip(request)
                form.ip = ip_address
                form.save()
            else:
                error= "empty fields"
                return render(request, 'registration/content.html',{'error': error,'form':form})
    else:
            form = RestaurantForm()
            return render(request, 'registration/content.html',{'form': form})

def get_client_ip(request):
    x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR')
    if x_forwarded_for:
        ip = x_forwarded_for.split(',')[0]
    else:
        ip = request.META.get('REMOTE_ADDR')
    return ip

提前致谢!

您没有将表单保存回局部变量。

试试这个:

restaurant = form.save(commit=False)

然后

restaurant.ip = ip_address
restaurant.save()

More on this here