django - inlineformset_factory与多个外键一起使用
我正在尝试使用以下模型来创建一个表单集(boost是主要的模型):
class boost(models.Model):
creator = models.ForeignKey(userInfo)
game = models.ForeignKey(gameInfo)
name = models.CharField(max_length=200)
desc = models.CharField(max_length=500)
rules = models.CharField(max_length=500)
subscribe = models.IntegerField(default=0)
class userInfo(models.Model):
pic_url= models.URLField(default=0, blank=True)
auth = models.ForeignKey(User, unique=True)
birth = models.DateTimeField(default=0, blank=True)
country= models.IntegerField(default=0, blank=True)
class gameInfo(models.Model):
psn_id = models.CharField(max_length=100)
name = models.CharField(max_length=200)
publisher = models.CharField(max_length=200, default=0)
developer = models.CharField(max_length=200, default=0)
release_date = models.DateTimeField(blank=True, null=True)
我想显示一个表单来添加一个Boost项目,尝试这样做:
TrophyFormSet = inlineformset_factory(db.gameInfo, db.boost, extra=1)
formset = TrophyFormSet()
我有几个问题:
1 - 当表单显示时,“创建者”的下拉框里显示的是“db.userInfo”的列表(字面意思)!我希望它能显示数据库中已经存在的db.userInfo.auth.username...我该怎么做呢?
2 - 这样的话,我的“db.gameInfo”在哪里可以选择呢?
谢谢!=D
======
czarchaic很好地回答了我的问题!但现在我还有一个小问题:
当我使用modelform为boost_trophy模型创建表单时:
class boost_trophy(models.Model):
boost = models.ForeignKey(boost)
trophy = models.ForeignKey(gameTrophyInfo)
# 0 - Obtiveis
# 1 - Requisitos minimos
type = models.IntegerField(default=0)
class gameTrophyInfo(models.Model):
game = models.ForeignKey(gameInfo)
name = models.CharField(max_length=500)
desc = models.CharField(max_length=500)
type = models.CharField(max_length=20)
它运行得很好,但我希望“游戏”框中只显示一小部分项目,仅显示:gameTrophyInfo(game__name="Game_A")的结果。我该怎么做呢?
1 个回答
12
如果我理解得没错的话:
要改变显示的内容,可以设置模型的 __unicode__
函数。
class userInfo(models.Model):
#model fields
def __unicode__(self):
return self.auth.username