gpt4 book ai didi

django - 验证 Django 中的唯一字段

转载 作者:行者123 更新时间:2023-11-30 23:50:57 25 4
gpt4 key购买 nike

我不知道我是否以正确的方式解决问题。预期的结果是有一个只显示 name 的表单。和 description .用户提交表单后,我想将当前用户添加为 owner并检查是否已经有一个条目具有相同的 nameuser .如果有,我想返回有错误的表单。如果没有,我想保存 Status .

我的型号:

class Status(models.Model):
name = models.CharField(max_length=100)
description = models.TextField(blank=True)
owner = models.ForeignKey(User)
active = models.BooleanField(default=True)

class Meta:
unique_together = ('name','owner')

我的看法:
def settings_status(request):
status_form = StatusForm()

if request.method == 'POST':
status_form = StatusForm(request.POST)
if status_form.is_valid():
new_status = Status()
new_status.name = status_form.cleaned_data['name']
new_status.description = status_form.cleaned_data['description']
new_status.owner = request.user
new_status.save()

return render_to_response('base/settings_status.html',{
'status_form' : status_form,
}, context_instance=RequestContext(request))

我尝试了很多东西,但我一直遇到问题,如果我添加 owner单独添加到对象,则模型的 clean 无法使用它函数,因此不能用于检查是否 nameowner是独一无二的。

最佳答案

有几种方法可以做到这一点:

例如,将用户(所有者)传递给表单:

表格.py:

class StatusForm(forms.Form):
def __init__(self, *args, **kwargs):
self.user = kwargs.pop('user','')
super(StatusForm, self).__init__(*args, **kwargs)
self.fields['name'] = forms.CharField(label='Name')
self.fields['description'] = CharField(label='Description', widget=forms.Textarea)

def clean(self):
cleaned_data = self.cleaned_data
name = cleaned_data.get('name')

if Status.objects.filter(name=name, owner=self.user).exists():
self._errors['name'] self.error_class(['Status with this name exists'])

return cleaned_data

View .py:
def settings_status(request):

if request.method == 'POST':
status_form = StatusForm(request.POST, user=request.user)
if status_form.is_valid():
new_status = Status()
new_status.name = status_form.cleaned_data['name']
new_status.description = status_form.cleaned_data['description']
new_status.owner = request.user
new_status.save()
else:
status_form = StatusForm(user=request.user)

context = {'status_form':status_form,}

return render_to_response('base/settings_status.html', context,
context_instance=RequestContext(request))

另请查看根据您的表单设置设置初始数据并考虑使用 ModelForm。

关于django - 验证 Django 中的唯一字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5690576/

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