gpt4 book ai didi

python - 使用具有多个字段的模型创建具有一个字段的表单

转载 作者:行者123 更新时间:2023-12-01 02:07:03 24 4
gpt4 key购买 nike

所以,我想记录人们所做的搜索(哦,不,我是国家安全局,等等)。为此,我有这个搜索模型:

class Search(models.Model):
search_string = models.CharField(max_length=40)
ip_record = models.GenericIPAddressField()
date_searched = models.DateTimeField(default=datetime.now())

然后,我有这个表格:

class SearchForm(ModelForm):
class Meta:
model = Search
fields = '__all__'

如何才能只显示search_string?我尝试设置 editable=False 并仅使用 search_string 字段作为提供给 fields 的单例列表,但这不会填充其他字段字段并创建完整性错误:

IntegrityError at /endos/
NOT NULL constraint failed: backend_search.ip_record

我应该如何创建这个表单?我如何创建一个只有一个字段而其他字段由计算机填充的字段?

最佳答案

在您的 SearchForm Meta 中,写入:

fields = ('search_string', ) # mind the ,

如果您只想将 search_string 放入表单中。

但是你还没有完成!问题是 - 正如 IntegrityError 所示 - 您没有设置 ip_records,需要为新的 Search 对象进行设置写入数据库。要设置字段,您可以保存表单而不提交,设置ip_records,然后提交。这一切都在 View 中:

if form.is_valid():
obj = form.save(commit=False)
obj.ip_record = get_IP(request) # get_IP is to define (see below)
obj.save()
<小时/>

对于获取 IP,这可能会有所帮助:

def get_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

该函数来自this所以问题。

关于python - 使用具有多个字段的模型创建具有一个字段的表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48958007/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com