【问题标题】:Django: Cannot set values on a ManyToManyField which specifies an intermediary modelDjango:无法在指定中间模型的 ManyToManyField 上设置值
【发布时间】:2017-11-29 17:56:13
【问题描述】:

我的 Django 应用程序中的 CreateView 有问题,我想创建一个会话,但会话只能由该组的 GroupMember 领导者创建。

这是我的模型:

class Group(models.Model):
    # The code

class GroupMember(models.Model):
    member = models.ForeignKey(Volunteer)
    group = models.ForeignKey(Group)
    leader = models.BooleanField(default=False)

class Session(models.Model):
    name = models.CharField(max_length=250)
    group = models.ForeignKey(Group)
    assistants = models.ManyToManyField(GroupMember, through='SessionAssistant')
    hours = models.FloatField(default=1)
    day = models.DateTimeField(default=datetime.now)

class SessionAssistant(models.Model):
    assistant = models.ForeignKey(GroupMember)
    session = models.ForeignKey(Session)
    rol = models.CharField(max_length=250)
    assist = models.BooleanField(default=True)

我还希望在创建会话时可以分配我的助手的角色,这是我的观点:

class CreateSession(CreateView):
    model = Session
    template_name = "session_form.html"
    fields = ['name',
              'hours',
              'day',
              'assistants', ]

    success_url = '/'

    def form_valid(self, form):
        group = Group.objects.get(id=self.kwargs['pk'])
        form.instance.group = group
        return super(CreateSession, self).form_valid(form)

【问题讨论】:

    标签: python django python-3.x django-models django-forms


    【解决方案1】:

    Django 不保存自定义ManyToMany 关系。看看official documentation

    您可以使用

    保存您的表单
    form.save()
    

    然后从SessionAssistant创建一个新对象

    for assistant in form.cleaned_data['assistants']:
        SessionAssistant.objects.create(assistant=assistant, session=form.instance)
    

    【讨论】:

      猜你喜欢
      • 2016-11-15
      • 2011-03-06
      • 2016-12-08
      • 2016-01-12
      • 2014-05-22
      • 1970-01-01
      • 2014-11-27
      • 1970-01-01
      • 2018-11-12
      相关资源
      最近更新 更多