django - 带有多个ForeignKey的inlineformset_factory

时间:2010-01-27 19:28:34

标签: python django

我尝试使用以下模型进行formset(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 - 重新定义时,“Creator”的组合框显示“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)

它的工作很好,但我想在“游戏”框中显示的形式只有一小部分的itens,只有:gameTrophyInfo(game__name =“Game_A”)结果。我怎么能这样做?

1 个答案:

答案 0 :(得分:4)

如果我理解正确的话:

要更改显示的内容,请设置模型的__unicode__功能

class userInfo(models.Model):
  #model fields

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