【问题标题】:Django Initial Value For Foreignkey Field外键字段的 Django 初始值
【发布时间】:2018-03-22 22:39:32
【问题描述】:

我正在尝试将一些初始数据传递给CourseForm 中的音​​量字段,但由于某种原因它不起作用。卷字段是数据库中表的ForeignKey

它不会给我错误;它只是不显示任何信息。

我的模型与相应的体积场:

class Course(models.Model):
    volume = models.ForeignKey(CourseVolume)
    code = models.CharField(max_length=100, default=None)
    # ... code shortend to simplify

我的Modelform,其型号设置为Course

class CourseForm(ModelForm):
    class Meta:
        model = Course
        fields = '__all__'

我试图为CourseForm 设置初始数据的视图。它似乎不起作用。 user.volume_preference 返回一个从 1 到 x 的整数,它是特定卷的 id。

def view_course_create(request):
    if request.method == 'POST':
        form = CourseForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('teaching_courses')
    else:
        user = MbsUser.get_user_from_ad(request.session['username'])
        if user.volume_preference is not None:
            volume = user.volume_preference
            form = CourseForm(initial={'volume': volume})
        else:
            form = CourseForm()
    return render(request, 'teaching/course_create.html', {'form': form})

我的 CourseVolume 模型:

class CourseVolume(CourseEnum):
    published = models.BooleanField(default=False)

class Meta(CourseEnum.Meta):
    db_table = 'mbs_course_volume'

如何解决?

【问题讨论】:

  • 您应该在CourseVolume 模型中的字段中提及初始值。然后它分配给volume 字段。
  • 尝试分配卷实例而不是id:volume = CourseVolume.objects.get(id=user.volume_preference)
  • 所以这是我需要更改的 CourseVolume 模型。我已将其添加到我的帖子中。但考虑到它使用db_table =,它似乎不允许类似:self.fields[field_name].initial = field_value 我试过你的方法@Alasdair 没有运气。

标签: python django forms foreign-keys


【解决方案1】:

尝试为音量字段添加默认值。该值应该是相关表的现有 id(CourseVolume)。

volume = models.ForeignKey(CourseVolume, default=1)

【讨论】:

  • 这可行,但我不知道如何使用user.volume_preference 动态更新此值。每个用户的默认值(可以)不同。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-07-03
  • 1970-01-01
  • 2016-03-13
  • 2018-09-26
  • 2022-12-05
  • 2012-09-21
  • 2021-01-22
相关资源
最近更新 更多