对于我认为是初学者问题,我无法找到合适的解决方案。任何帮助都非常感谢。
我正在建设的网站将用于计划聚会。两种类型的人将使用它,派对组织者和派对访客。派对组织者可以创建派对并选择要提供给访问者的项目。物品是食物和饮料,1件=一份披萨或一份啤酒。
然后,用户将能够确认参加聚会并选择他们想要订购的食品和饮料以及订购的数量。我已经创建了一个身份验证和创建聚会。
现在,我的问题是:
我尝试使用以下代码(修剪):
models.朋友:
class ItemType(models.Model):
"""Create items (food and drinks)."""
name = models.CharField()
class Party(models.Model):
"""Create a party."""
organizer = models.ForeignKey(User)
party_name = models.CharField()
items_to_be_offered = models.ManyToManyField(ItemType)
class PartyRegistration(models.Model):
"""Register for a party / create party registration."""
party = models.ForeignKey(Party)
visitor = models.CharField()
selected_items = models.ManyToManyField()
class ItemSelection(models.Model):
"""Specify which items and number of items the visitor selected."""
party_registration = models.OneToOneField(PartyRegistration)
item_type = models.ManyToManyField(ItemType)
item_quantity = models.PositiveIntegerField()
forms.朋友
class VisitorRegisterForm(forms.ModelForm):
"""Form to register a visitor."""
class Meta:
model = PartyRegistration
fields = ['visitor', 'selected_items']
views.朋友
def VisitorRegister(request, pk):
"""Register Visitor to a specific party."""
party = get_object_or_404(Party, pk=pk)
if request.method == 'POST':
form = VisitorRegisterForm(request.POST)
if form.is_valid():
name_clean = form.cleaned_data['visitor']
registration = PartyRegistration(party=party, visitor=name_clean)
registration.save()
return HttpResponseRedirect(reverse('index'))
else:
form = VisitorRegisterForm()
context = {'form': form, 'party': party}
return render(request, 'visitor-register.html', context)
网站是Django 2.0,PostgreSQL。
在这种情况下,您需要与through
模型建立ManyToMany关系(订单很重要,或更改订单并引用PartyRegistration
):
class PartyRegistration(models.Model):
"""Register for a party / create party registration."""
party = models.ForeignKey(Party)
visitor = models.CharField()
selected_items = models.ManyToManyField(ItemType, through='ItemSelection')
class ItemSelection(models.Model):
"""Specify which items and number of items the visitor selected."""
party_registration = models.ForeignKey(PartyRegistration)
item_type = models.ForeignKey(ItemType)
item_quantity = models.PositiveIntegerField(default=1)
class Meta:
unique_together = ('party_registration', 'item_type')
见https://docs.djangoproject.com/en/2.1/topics/db/models/#intermediary-manytomany