我的项目中有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
答案 0 :(得分:1)
这是您尚未保存的Attendee对象。
您可以使用m2m字段上的create
方法将其快捷方式:
for row in csv_reader:
self.attendees.create(name=whatever)
(请注意,请不要盲目捕获异常。Django已经做到了,并报告了一个有用的错误页面。仅捕获您实际要处理的异常。)
答案 1 :(得分:0)
显然,当我使用非管理员Web仪表板时,该功能有效。使用默认创建的/ admin仪表板时,此功能不起作用。我从结果中假设,即使我已覆盖save方法(因此应调用我的save方法以及其他方法),在保存模型对象的同时,管理端代码也会调用不同的方法。如果找到,我将提供更多信息。