Django Manytomany add



我的项目中有 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 仪表板时,此功能不起作用。我从结果中假设管理端代码在保存模型对象时调用不同的方法,即使我已经覆盖了保存方法(因此应该调用我的保存方法以及其他方法(。如果我找到它,我会更新更多信息。

相关内容

  • 没有找到相关文章

最新更新