Django 表单无效 - 不是空约束



我一直在研究这个问题。我的表格一直无效。

model.py

class GroupMember(models.Model):
Groupname = models.ForeignKey(DareGroups, on_delete=models.CASCADE)
Username = models.ForeignKey(DareUser, on_delete=models.CASCADE)
IsAdmin = models.BooleanField(default=False)
@receiver(post_save, sender=DareGroups)
def create_GroupAdmin(sender, instance, created, **kwargs):
if created:
GroupMember.objects.create(Groupname=instance,Username=get_current_authenticated_user().dareuser,IsAdmin=True)
#print(instance)
def __str__(self):
return self.Groupname.Groupname + "_"+self.Username.Username.username

view.py

def index(request):
if request.user.is_authenticated==True:
print('we zijn hier 1')
if request.method == "POST":
print('we zijn hier 2')
if 'newgroup' in request.POST:
formgroup = GroupsForm(request.POST)
if formgroup.is_valid():
print('komen we dan hier?')
formgroup.save()
return redirect('index')
elif 'newchallenge' in request.POST:
formchallenge = NewChallengeForm(request.POST)
if formchallenge.is_valid():
formchallenge.save()
return redirect('index')
elif 'addmember' in request.POST:
formaddmember=AddMemberToGroupForm(request.POST)
print('we zijn hier 3')
print(formaddmember.data)
if formaddmember.is_valid():
print('we zijn hier 4')
formaddmember.save()
else:
print('we zijn hier 5')
formaddmember.save()
print(formaddmember.errors)
return redirect('index')

else:
formgroup = GroupsForm()
formchallenge=NewChallengeForm()
formaddmember=AddMemberToGroupForm()
return render(request,"DareU/index.html",{'formgroup':formgroup,'formchallenge':formchallenge,'formaddmember':formaddmember})
else:
return render(request,"DareU/index.html")

forms.py

class AddMemberToGroupForm(forms.ModelForm):
class Meta:
model = GroupMember
fields = ('Groupname', 'Username','IsAdmin')
def __init__(self, user=None, **kwargs):
super(AddMemberToGroupForm, self).__init__(**kwargs)
self.fields['Groupname'].queryset = DareGroups.objects.filter(groupmember__IsAdmin=True)

.HTML

<div class='container has-text-left' id="myForm3">
<h2 class="title is-2">Add member to group</h2>
<form method="POST" class="post-form">
{% csrf_token %}
{{ formaddmember.as_p }}
<button type="submit" class="button is-small is-success" name="addmember">Save</button>
<button type="button" class="button is-small is-danger cancel" onclick="closeForm3()">Close</button>
</form>
</div>

所以,我无法通过is_valid检查。如果我尝试保存,则会出现以下错误:

不空约束失败:DareU_groupmember。Username_id

表单呈现良好。我可以为组名和用户名选择正确的值,但似乎在发布表单时,这些值会以某种方式丢失。

我认为这是因为您没有将 *args 传递给 super((,如果您要传递额外的 kwargs,请确保在调用 super(( 之前弹出它们。

def __init__(self, *args, **kwargs):
super(AddMemberToGroupForm, self).__init__(*args, **kwargs)
self.fields['Groupname'].queryset = DareGroups.objects.filter(groupmember__IsAdmin=True)

所以 Harben 让我走上了正确的道路,看看 init 方法。

它像这样重写后工作:

def __init__(self, *args, **kwargs):
super().__init__(*args,**kwargs)
self.fields['Groupname'].queryset = DareGroups.objects.filter(groupmember__IsAdmin=True)

最新更新