所以我有两个模型,通过Many-to-many
关系相关。因为我需要一个额外的文件我正在使用额外的模型CategoryByDay
Django适用于多对多模型。如何从视图/模板填充表单?
基本上我想在我的应用程序,是创建一个习惯或日常列表,将记录我今天必须做的各种事情。所以我想把每个新的一天与每个类别连接起来,并记录下它的状态(如果它完成了1
,如果不是0
)。我使用CharField
,因为后来我想书籍阅读等登录其他的东西,这不是与此有关
models.py
from django.db import models
class Day(models.Model):
name = models.CharField(max_length=8)
date = models.DateField()
def __unicode__(self):
return self.name
class Category(models.Model):
name = models.CharField(max_length=100)
categoryBD = models.ManyToManyField(Day, through='CategoryByDay')
def __unicode__(self):
return self.name
class CategoryByDay(models.Model):
day = models.ForeignKey(Day)
category = models.ForeignKey(Category)
status = models.CharField(max_length=64)
在我html
我要显示的类别列表和形式靠近它的地方,只会发布状态和日期以及类别将自动填充。现在我不知道该怎么做。这是我到目前为止,阅读一些论坛,您可以从视图传递额外的数据(这不是工作,并形成需求,我填写日期和类别形式)
views.py
def today(request):
if request.method == 'POST':
#... POST validation here, not relevant
else:
day = datetime.date.today().strftime("%d/%m/%y")
categories_list = Category.objects.all()
category_form_list = []
# I am doing this strange list, because later in template I had problem
# accessing list through iteration like forloop.counter.
# I will access it via for x,y in pair
for category in categories_list:
data = {'day': day,
'category': category.name,}
form = CategoryByDayForm(data)
#So I tried adding data to form, it didn't work and can be ignored
part = [category, form]
category_form_list.append(part)
context = { 't': t,
'category_form_list': category_form_list,}
return render(request, 'today/today.html', context)
这是我的表格,我猜应该早些时候添加它。
形式PY
class CategoryByDayForm(forms.ModelForm):
status = forms.CharField(max_length=64, initial="0")
day = forms.ModelMultipleChoiceField(queryset=Day.objects.all())
category = forms.ModelMultipleChoiceField(queryset=Category.objects.all())
class Meta:
model = CategoryByDay
现在,形式我不确定我应该用什么样的形式类型,白天和类别。也许我应该忽略它?
最后模板:
今天HTML
#...
<ul>
{% for category, form in category_form_list %}
<li>
{{ category.name }}
<form action="" method="post">
{% csrf_token %}
{{ form.non_field_errors}}
<div class="status">
{{ form.status.errors}}
{{ form.status }}
<input type="submit" value="Submit" />
</div>
</form>
</li>
{% endfor %}
</ul>
#...
这工作,通过只显示一种形式status
但是当我点击我的方式提交和调试它,我有没有填写错误日期和类别表格。
有人可以告诉我如何进行?
这样做的一个简单的方法是创建特定日期和类别的视图(在URL中提到)。然后表单必须忽略日期和分类字段。它应该在保存表单时填充它们。 – arocks
@arocks所以我遵循你的建议,从字段中删除日期和类别,并设法在我的意见中设置一天。日子很简单,因为它一直在节约今天的日子。现在,有没有办法从模板发送类别名称?我现在可以用request.category检索它,只要我知道如何发送它。 – qnsi
为什么不把它从像http://example.com/category/23/这样的网址中获得,其中23是类别ID? – arocks