所以我有兩個模型,通過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