我的项目中有 2 个模型,具有多对多关系。在保存模型事件时,我从event_attendees文件中读取并将其添加到事件的与会者字段中。未显示错误/异常,但与会者未添加到与会者字段中。使用与会者字段进行更改后,是否需要再次保存模型?如果是这样,如何做到这一点(从add_attendees调用 save 方法将导致程序进入无限循环(?
class Attendee(models.Model):
name = models.CharField(max_length=100)
class Event(models.Model):
name = models.CharField(max_length=100)
event_attendees = models.FileField(upload_to='documents/', blank=True)
attendees = models.ManyToManyField(Attendee, blank=True)
def save(self, *args, **kwargs):
super().save()
self.add_attendees()
def add_attendees(self):
with open(self.event_attendees.url[1:]) as csv_file:
# Some code here
for row in csv_reader:
# Some code here
attendee = Attendee(name=name)
attendee.save()
self.attendees.add(attendee)
print(self.attendees.all()) # attendee added
print(attendee.event_attended) # event present with attendee
#Refresh template to check changes -> Changes lost
它是您尚未保存的与会者对象。
您可以通过在 m2m 字段上使用 create
方法对其进行快捷方式:
for row in csv_reader:
self.attendees.create(name=whatever)
(注意,请不要盲目捕捉异常。Django 已经这样做了,并报告一个有用的错误页面。只捕获您实际要处理的异常。
显然,当我使用非管理员 Web 仪表板时,该功能有效。使用默认创建的/admin 仪表板时,此功能不起作用。我从结果中假设管理端代码在保存模型对象时调用不同的方法,即使我已经覆盖了保存方法(因此应该调用我的保存方法以及其他方法(。如果我找到它,我会更新更多信息。