尝试使用模型表单集工厂保存'list'对象没有属性'event'



我正在尝试通过 Djangomodel_formset保存相关的模型字段,但它给了我这个错误:

AttributeError at /events/event/52/detail
'list' object has no attribute 'fields'

有没有人遇到过这种情况,并且知道如何解决它?谢谢。

视图

def event_detail(request, pk):
event = get_object_or_404(Event, pk=pk)
TicketFormSet = modelformset_factory(Ticket,
exclude=('event',),
extra=1, max_num=3)
if request.method == 'POST':
ticket_form = TicketFormSet(request.POST)
if ticket_form.is_valid():
ticket_obj = ticket_form.save(commit=False)
ticket_obj.event = event
ticket_obj.save()
else:
ticket_form = TicketFormSet()
return render(request, 'events/event/event_detail.html',
{'event': event, 'formset': ticket_form})

class Ticket(models.Model):
event = models.ForeignKey(Event, on_delete=models.CASCADE)
name = models.CharField(max_length=120)
quantity = models.SmallIntegerField()
price = models.FloatField()
def __str__(self):
return '{} {}'.format(self.event.name, self.name)

窗体集创建对象列表,因此ticket_form是一个列表,而不是模型实例。您需要对列表中的每个项目设置event

但是你应该使用内联表单集,它会自动执行此操作:

TicketFormSet = inlineformset_factory(Event, Ticket,
exclude=('event',),
extra=1, max_num=3)
if request.method == 'POST':
ticket_form = TicketFormSet(request.POST, instance=event)
if ticket_form.is_valid():
ticket_form.save()

最新更新