在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()
我目前在将数据保存到数据库时遇到问题。我打算做的是我有一个 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()