我在使用form.save(COMMIT=FALSE)时遇到错误,并且我找不出自己做错了什么.

我的观点是这样的:

views.py

def make_electable(request, election_id):
    election = get_object_or_404(CommissionElection, id=election_id)
    if request.method == 'POST':
        form = MakeElectable(request.POST)
        if form.is_valid():
            electable = form.save(commit=False)
            electable.election.set(election)
            form.save()

forms.py

class MakeElectable(forms.ModelForm):
    class Meta:
          model = ElectablePerson
          fields = ['commission',]
    commission = forms.ModelChoiceField(queryset=Commissie.objects.all(), widget=forms.RadioSelect())

models.py

class CommissionElection(models.Model):
    title = models.CharField(max_length=64)
    commission = models.ManyToManyField(Commissie)
    electable_time = DateRangeField()
    voting_time = DateRangeField()


class ElectablePerson(models.Model):
    commission = models.CharField(max_length=128)
    election = models.ManyToManyField(CommissionElection)

我得到的错误是:

在使用这种多对多关系之前,"<elecablePerson:Electric ablePerson Object(None)>"需要有一个"id"字段的值.

我不明白为什么这个物体是空的.我怀疑这与许多其他领域有关.

推荐答案

多对多字段是一个表,它使用‘id_electable,id_election’作为键,如果COMMIT=FALSE,您就不会持久化,因为它没有给您提供id.下面的代码应该可以解决您的问题.

if form.is_valid():
    electable = form.save()
    electable.election.add(election)

另请参阅https://docs.djangoproject.com/en/dev/ref/models/relations/#django.db.models.fields.related.RelatedManager.add表示多对多关系.

Django相关问答推荐

Django-将html数据保存到quillfield中

Django:我的上下文变量不能用于重复的for循环

将所有守护用户对象权限从一个Django用户重新分配给另一个Django用户

按下按钮刷新在html文件中显示的变量

身份验证有效,但登录无效.一直卡在pending

如何在 Django 模板中的计数器上进行 for 循环中断?

Django ModelForm提交按钮不起作用

Django 身份验证系统修改

Django 模型命名约定

如何在 Django ORM 中执行 GROUP BY ... COUNT 或 SUM?

Django:将原始html(来自数据库)显示为html,而不是呈现

Django:如何使用动态(非模型)数据预填充 FormView?

如何在 Django 中配置 X-Frame-Options 以允许 iframe 嵌入一个视图?

UnicodeEncodeError:ascii编解码器无法编码字符

Django - 配置不当:模块django.contrib.auth.middleware

Django 什么是反向关系?

如何查询名称包含python列表中任何单词的模型?

django 如何知道已经运行了哪些迁移?

如何获取 Django 模型字段对象的值

Python Django 的多线程