Skip to main content
 首页 » 编程设计

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

2024年08月20日25insus

我的 Django 应用程序中的 CreateView 有问题,我想创建一个 session ,但 session 只能由该组的组长创建。

这是我的模型:

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) 

我还想在创建 Sesision 时分配我的助手的角色,这是我的观点:

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)