【问题标题】:ForeignKey returns id when editing the formForeignKey 在编辑表单时返回 id
【发布时间】:2011-05-19 03:20:23
【问题描述】:

这是我的模特

class Category(models.Model):
    title = models.ForeignKey(Title, verbose_name="Title")
    class Meta:
        ordering = ['title']
    def __unicode__(self):
        return self.title.title

我正在使用表单将 ForegnKey 字段替换为 CharField

class CategoryForm(forms.ModelForm):
    title = forms.CharField(label = "Title")
    class Meta:
        model = Category

class CategoryAdmin(admin.ModelAdmin):
    form = CategoryForm

我的标题模型

class Title(models.Model):
    title = models.CharField("Title", max_length=200)

    def __unicode__(self):
        return self.title

当我添加和显示类别时一切正常,但当我尝试编辑类别时,我在标题字段中获得 ForeignKey ID。我希望它是标题字符串。有什么办法吗?

非常感谢

【问题讨论】:

  • 为什么你的 Title 模型只有一个字段?为什么不只是类别上的 models.CharField 标题?
  • 标题字段只是一个例子。我将它用作外键,因为它将被其他应用程序使用。模型中有更多代码,但我只发送了必要的代码。谢谢

标签: python django django-models django-forms


【解决方案1】:

我没有检查这个解决方案(我现在无法创建测试应用程序),我不确定它是否有效。

尝试将exclude = ("title", ) 添加为 CategoryForm 成员。另外,也许您需要覆盖 CategoryForm 的 save()(可能还有其他)方法。

【讨论】:

    【解决方案2】:

    我已通过使标题唯一并将 to_field 选项添加到我的类别类中的 ForeignKey 来解决此问题。这是代码:

    class Title(models.Model):
        title = models.CharField("Title", max_length=200, unique=True)
    
        def __unicode__(self):
            return self.title
    class Category(models.Model):
        title = models.ForeignKey(Title, verbose_name="Title", to_field='title')
    
        class Meta:
            ordering = ['title']
    
        def __unicode__(self):
            return self.title.title

    谢谢

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-27
      • 2019-03-13
      • 2010-11-26
      • 1970-01-01
      • 2021-04-09
      • 2014-05-15
      相关资源
      最近更新 更多