我的forms.py
from django.utils.translation import ugettext_lazy as _
from django.contrib.auth.models import User
from item.models import *
from django import forms
class catalogForm(forms.Form):
title = forms.CharField(widget=forms.TextInput(attrs=dict(required=True, max_length=30, render_value=False)), label=_("Catalog Title"))
#item = forms.ModelMultipleChoiceField(queryset=Item.objects.exclude(user=1), widget=forms.SelectMultiple)
#def __init__(self, userId, *args, **kwargs):
#super(catalogForm, self).__init__(*args, **kwargs)
#self.fields['item'].queryset = Item.objects.filter(user = userId)
def __init__(self, qs=None, *args, **kwargs):
super(catalogForm, self).__init__(*args, **kwargs)
if qs:
self.fields['item'] = forms.ModelMultipleChoiceField(queryset=qs, widget=forms.CheckboxSelectMultiple())
我的models.py
from django.db import models
from item.models import Item
from django.contrib.auth.models import User
class Catalog(models.Model):
title = models.CharField(max_length=200)
item = models.ManyToManyField(Item, blank=True, null=True)
user = models.ForeignKey(User)
pub_date = models.DateTimeField('date published')
def __str__(self):
return self.title
我的views.py
def catalog(request):
# if this is a POST request we need to process the form data
qs = Item.objects.filter(user = request.user)
if request.method == 'POST':
# create a form instance and populate it with data from the request:
form = catalogForm(qs,request.POST)
# check whether it's valid:
if form.is_valid():
title=form.cleaned_data['title']
item=form.cleaned_data['item']
user= request.user
q = Catalog(title=title, pub_date=timezone.now(),user=user)
q.save()
q.item = item.values()
return HttpResponseRedirect('/thanks/')
# if a GET (or any other method) we'll create a blank form
else:
form = catalogForm(qs)
return render(request, 'catalog/catalog.html', {'form': form})
因此,我想从Items
中选择多个Combo box
,并针对特定ID
插入catalog
。还希望稍后检索特定Items Id
的每个catalog
。在models.py
django
的最佳方法是什么?
现在,如果我尝试使用此代码插入,我只能插入catalog_catalog
,如何将item
插入到catalog_catalog_item
表中
提前感谢您的帮助。
答案 0 :(得分:0)
您需要此模型字段(记得运行迁移):
item = models.ManyToManyField(Item)
然后在保存表单时,首先保存目录对象,然后添加相关项:
items = form.cleaned_data['items']
q = Catalog(title=title, pub_date=timezone.now(), user=user)
q.save()
q.items = items.values()
使用items.values()
从商品querydict获取ID。