【问题标题】:Django: adding excluded fields after ModelForm submissionDjango:ModelForm提交后添加排除字段
【发布时间】:2020-04-25 06:38:49
【问题描述】:

我有一个 ModelForm,其中排除了 selected_season 字段。模型如下所示(显示相关部分):

class Registration(models.Model):
    student_name = models.CharField(max_length=50)
    selected_season = models.ForeignKey(Season, on_delete=models.CASCADE)
    ...

在保存表单之前,我尝试在以下位置添加该字段:

if form.is_valid():
   form.save(commit=False)
   form.selected_season = '21'
   form.save()

但它显示null value in column "selected_season_id" violates not-null constraint 我添加了 21,因为我的季节表中有 2 个对象,“21”和“22”。我该如何解决这个问题?

编辑

季节模型如下所示:

class Season(models.Model):
    season = models.CharField(max_length=2, primary_key=True)
    subject = models.ManyToManyField(Subject)
    running = models.BooleanField(default=False)

主键不是id,而是season 属性。在我不得不修改普拉万的答案之后:

if form.is_valid():
            form.save(commit=False)
            season=Season.objects.get(season=21)
            form.selected_season = season
            form.save()

但问题仍然存在。

【问题讨论】:

  • '21'是一个字符串,需要给form.selected_season赋值一个Season对象
  • 你能告诉我该怎么做吗?

标签: django django-models django-forms django-views


【解决方案1】:

获取对象并分配如下

if form.is_valid():
   form.save(commit=False)
   season=Season.objects.get(season="21")
   form.selected_season = season
   form.save()

【讨论】:

  • 我已经尝试过了,但必须用不同的方法来做。问题还是一样。请检查编辑
  • 我根据你的主键检查更新了一次。
【解决方案2】:

它抛出错误是因为您没有在模型中写 null=True, blank=True,并且使用该表单注册用户。添加它们应该可以解决问题。 试试:

selected_season = models.ForeignKey(Season, on_delete=models.CASCADE, null=True, blank=True)

【讨论】:

  • 但我需要存在这些值
猜你喜欢
  • 2020-11-12
  • 2013-08-24
  • 2019-04-21
  • 2014-10-17
  • 2020-11-04
  • 2016-04-14
  • 1970-01-01
  • 1970-01-01
  • 2022-12-23
相关资源
最近更新 更多