【发布时间】:2021-01-12 20:11:15
【问题描述】:
我试图让用户创建一个“俱乐部”(基本上是一个组),用户以后可以在其中添加用户。
目前它不会以某种方式在数据库中创建字段。
任何建议都将不胜感激,因为我对表单相当陌生。
型号
class Club(models.Model):
owner = models.CharField(max_length=30)
topic = models.CharField(max_length=30)
start = models.DateTimeField(verbose_name='start date', auto_now_add=False)
end = models.DateTimeField(verbose_name='end date', auto_now_add=False)
account = models.ManyToManyField(Account)
观看次数
@login_required
def add_club(request):
if request.method == "POST":
form = AddClubForm(request.POST, instance=request.user)
print(form)
if form.is_valid():
form.save()
return HttpResponseRedirect(request.path_info)
else:
form = AddClubForm(instance=request.user)
return render(request, 'page/club.html', {
"form": form,
})
表格
class AddClubForm(forms.Model):
owner = forms.CharField(required=True)
topic = forms.CharField(required=False)
start = forms.DateField(required=False)
end = forms.DateField(required=False)
class Meta:
model = Club
fields = (
'owner',
'topic',
'start',
'end',
)
模板
<form method="POST" action="">
{% csrf_token %}
<div class="col-md-6">
<label class="labels">Create a club</label>
{{ form.owner }}
<input class="btn" type="submit" value="Add club">
</div>
</form>
【问题讨论】:
-
您好,您没有任何错误信息吗?你为什么将 request.user 作为一个实例传递给你的表单(它应该是一个 Club 实例)?在您的模板中,
{{ form.owner }}而不仅仅是{{ form.}}的任何原因?此外,您的 Account M2M 关系不是blank=True,因此它在创建实例时需要它。 -
嗨 Brise,没有错误消息。我将用户作为实例传递,因为我必须检查他们是否经过身份验证。在我的模板中,我使用
{{ form.owner }},因为我最终会添加更多字段,例如form.topic等。关于blank=True的好点,但数据库中仍然没有。 -
我对 form.owner 不利,没有看到其他字段被标记为 required=False。然后在这些字段的模型中也需要
blank=True, null=True。我仍然没有得到instance=request.user,因为实例需要是一个俱乐部对象,并且您的视图已经需要用户通过包装器@login_required登录。您的意思是您希望自动将 request.user 设置为已创建俱乐部的所有者? -
感谢您的
blank=True和null=True解决了这个问题。非常感谢您的意见。谈到instance=request.user,你说得对,我可以删除它。但是,您不能将表单作为实例传递。 -
我在下面发布了答案。你介意验证一下吗?我也尝试解释这个实例,因为它是 Django 的 ModelForms 的一个非常重要的特性。
标签: django django-models django-views django-forms