python - Django:无法在指定中间模型的 ManyToManyField 上设置值

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

我的 Django 应用程序中的 CreateView 出现问题,我想创建一个 session ,但 session 只能由该组的 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)

此外,我希望当我创建 session 时我可以分配我的助手的角色,这是我的观点:

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)

最佳答案

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

您可以使用保存表单

form.save()

然后从SessionAssistant创建一个新对象

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

关于python - Django:无法在指定中间模型的 ManyToManyField 上设置值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44767405/

相关文章:

python - 清空 GAE 中的数据存储

模型中 _set 的 Django 管理器

django - 反向未找到 : Sending Request Context in from templates

html - 在 Django 中设置自定义用户注册表单的样式

python-3.x - 链接到python 3中字节对象的一部分

python - 错误 : No module named psycopg2. 扩展 django postgresql

python - 这些奇特的 TypeVar 的 PyCharm 生成了什么?

c# - 使用 C# 和 httpclient 将请求发送到 Rest Api

python - 在 numpy 数组中传播最大值

python - 在ubuntu中安装ujson的问题