Django表单无效非空约束

2024-05-05 10:23:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我研究这个问题已经有一段时间了。我的表格一直无效

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>

所以,我不能通过有效的检查。如果我尝试仅保存,则会出现以下错误:

NOT NULL constraint failed: DareU_groupmember.Username_id

这个形状很好。我可以为groupname和username选择正确的值,但在发布表单时,这些值似乎不知怎么丢失了


Tags: selfindexreturnifismodelsrequestusername
2条回答

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

它是这样重新编写的:

def __init__(self, *args, **kwargs):

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

我认为这是因为您没有将*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)

相关问题 更多 >