12

我有以下课程:成分,食谱和食谱内容......

class Ingredient(models.Model):
    name = models.CharField(max_length=30, primary_key=True)
    qty_on_stock = models.IntegerField()

    def __unicode__(self):
        return self.name

class Recipe(models.Model):
    name = models.CharField(max_length=30, primary_key=True)
    comments = models.TextField(blank=True)
    ingredient = models.ManyToManyField(Ingredient)

    def __unicode__(self):
        return self.name

class RecipeContent(models.Model):
    recipe = models.ForeignKey(Recipe)
    ingredients = models.ForeignKey(Ingredient)
    qty_used = models.IntegerField()

但是对于 RecipeContent 中的 __unicode__() 我想使用此 RecipeContent 所属的食谱名称......有没有办法做到这一点?

4

4 回答 4

26
class RecipeContent(models.Model):
  ...
  def __unicode__(self):
    # You can access ForeignKey properties through the field name!
    return self.recipe.name
于 2008-12-27T20:02:38.330 回答
2

如果您只关心食谱的名称部分,您可以这样做:

class Recipe(models.Model):
    name = models.CharField(max_length=30, primary_key=True)
    comments = models.TextField(blank=True)
    ...

    def __unicode__(self):
        return self.name

class RecipeContent(models.Model):
    recipe = models.ForeignKey(Recipe)
    ...

    def __unicode__(self):
        return str(self.recipe)
于 2011-07-16T01:01:29.723 回答
0

__unicode__()是的,你可以(作为 bishanty 点),但要为被叫但 FK 尚未设置的情况做好准备。我来过几次。

于 2008-12-31T18:31:53.533 回答
0

在 Python 3 中没有__unicode__,您需要改为使用__str__

    class RecipeContent(models.Model):
        ...
        def __str__(self):
            return self.recipe.name
于 2018-01-12T02:32:35.873 回答