django - 具有多个 ForeignKey 的 inlineformset_factory

Posted

技术标签:

【中文标题】django - 具有多个 ForeignKey 的 inlineformset_factory【英文标题】:django - inlineformset_factory with more than one ForeignKey 【发布时间】:2011-01-10 02:51:03 【问题描述】:

我正在尝试使用以下模型做一个表单集(提升是主要的):

类提升(模型。模型): 创建者 = models.ForeignKey(userInfo) 游戏 = 模型.ForeignKey(gameInfo) 名称 = models.CharField(max_length=200) desc = models.CharField(max_length=500) 规则 = models.CharField(max_length=500) 订阅 = models.IntegerField(default=0) 类用户信息(模型。模型): pic_url=models.URLField(默认=0,空白=真) auth = models.ForeignKey(User, unique=True) 出生 = models.DateTimeField(默认 = 0,空白 = True) country= models.IntegerField(默认=0,空白=True) 类游戏信息(模型。模型): psn_id = models.CharField(max_length=100) 名称 = models.CharField(max_length=200) 发布者 = models.CharField(max_length=200, default=0) developer = models.CharField(max_length=200, default=0) release_date = models.DateTimeField(空白=真,空=真)

我想显示一个表单来添加一个Boost项,尝试这样做:

TrophyFormSet = inlineformset_factory(db.gameInfo, db.boost, extra=1) formset = TrophyFormSet()

这是我的问题:

1 - 渲染时,“Creator”的组合框显示“db.userInfo”列表(字面意思)!我希望它显示数据库中已经存在的 db.userInfo.auth.username ......怎么做?

2 - 这样,我的“db.gameInfo”在哪里可以选择?

谢谢! =D

======

czarchaic 很好地回答了我的问题! 但是现在我只需要一个小问题:

当我使用 modelform 为 boost_trophy 模型创建表单时:

类 boost_trophy(models.Model): boost = models.ForeignKey(boost) 奖杯 = models.ForeignKey(gameTrophyInfo) # 0 - Obtiveis # 1 - Requisitos minimos type = models.IntegerField(default=0) 类 gameTrophyInfo(models.Model): 游戏 = 模型.ForeignKey(gameInfo) 名称 = models.CharField(max_length=500) desc = models.CharField(max_length=500) type = models.CharField(max_length=20)

它的工作很好,但我希望表单在“游戏”框中只显示一小部分项目,只有:gameTrophyInfo(game__name="Game_A") 结果。我该怎么做?

【问题讨论】:

应该是这个效果。每个gameTrophyInfo可以属于一个gameInfo,但是每个gameInfo可以有多个gameTrophyInfo 用你的新问题创建一个新问题。 【参考方案1】:

如果我理解正确的话:

要更改显示的内容,请设置模型的 __unicode__ 函数

class userInfo(models.Model):
  #model fields

  def __unicode__(self):
    return self.auth.username

【讨论】:

把你说的放在gameInfo和userInfo中。用gameInfo就可以了,谢谢!但是使用 userInfo,我得到一个错误:用户匹配查询不存在。这就是 self.auth.username 在另一个模型中的原因吗?

以上是关于django - 具有多个 ForeignKey 的 inlineformset_factory的主要内容,如果未能解决你的问题,请参考以下文章

具有 ForeignKey 字段的模型的 Django ModelForm 无法正确显示 selectBox

如何在 django 的单个视图中显示多个 ForeignKey 过滤项目?

在具有所需 ForeignKey 引用的 Django (1.8) 应用程序之间移动模型

在具有所需 ForeignKey 引用的 Django (1.8) 应用程序之间移动模型

在 Django [数据库] 中链接多个模型的更好方法 - ManyToManyFields、ForeignKey 和 CharFields

在 Django 中,如何将 ForeignKey 传递给 Model 的实例?