因此,我有2个通过Many-to-many
关系关联的模型。因为我需要一个额外的文件,所以我正在使用额外的模型CategoryByDay
基本上,我想要在应用程序中创建一个习惯或日常清单,以记录我今天要做的各种事情。因此,我想将每个新的一天与每个类别联系起来并记录其状态(如果完成了1
,如果没有完成的话0
)。我正在使用CharField
,因为稍后我想记录其他内容,例如阅读的书籍等,此处不相关
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
我要显示“类别”列表和靠近它的表格,其中仅会发布状态和日期以及类别,系统将自动填写该列表。现在我不知道该怎么做。这就是到目前为止,在某个论坛上阅读的内容,您可以从视图中传递额外的数据(这不起作用,并且表格要求我填写日期和类别表格)
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)
这是我的表格,我猜应该早些添加。
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
现在,在表格中,我不确定应该为日期和类别使用哪种表格类型。也许我应该以某种方式忽略它?
最后的模板:
#...
<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
但是当我单击“提交”并以我的方式对其进行调试时,出现了我尚未填写日期和类别表单的错误。
有人可以告诉我如何进行吗?
我设法使它起作用。
对于以后因意外搜索和进入此页面的任何人,这是我的工作。
1.更改了CategoryByDayForm的形式,使其仅接受状态并且不包括日期和类别
from django import forms
from today.models import CategoryByDay, Category, Day
class CategoryByDayForm(forms.ModelForm):
status = forms.CharField(max_length=64, initial="0")
class Meta:
model = CategoryByDay
exclude = ['day', 'category']
#...
{% for category, form in category_form_list %}
<li>
{{ category.name }}
<form action="" method="post">
{% csrf_token %}
{{ form.non_field_errors}}
<input type="hidden" value="{{ category.name }}" name="category">
<div class="status">
{{ form.status }}
<input type="submit" value="Submit" />
</div>
</form>
</li>
{% endfor %}
# ...
最后,在视图中,我操纵了所获得的表单,因此添加了缺失的元素(从具有状态的表单中,我仍然需要设置日期和类别)
def today(request):
t = datetime.date.today().strftime("%d/%m/%y")
day = Day.objects.filter(name=t)
if request.method == 'POST':
form = CategoryByDayForm(request.POST)
if form.is_valid():
category_status = form.save(commit=False)
category_status.day = day[0]
category_name = request.POST['category']
category_status.category = Category.objects.filter(name=category_name)[0]
category_status.save()
form.save_m2m()
希望它能对以后的人有所帮助。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句