Могу ли я использовать ForeignKey в возвращении __unicode__? - PullRequest
12 голосов
/ 27 декабря 2008

У меня есть следующие классы: Ingredients, Recipe и RecipeContent ...

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()

но для __unicode __ () в RecipeContent я хотел бы использовать имя рецепта, которому принадлежит этот RecipeContent ... есть ли способ сделать это?

Ответы [ 4 ]

26 голосов
/ 27 декабря 2008
class RecipeContent(models.Model):
  ...
  def __unicode__(self):
    # You can access ForeignKey properties through the field name!
    return self.recipe.name
2 голосов
/ 16 июля 2011

Если вы заботитесь только об именной части рецепта, вы можете сделать:

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)
0 голосов
/ 12 января 2018

В Python 3 нет __unicode__, вам нужно использовать __str__.

    class RecipeContent(models.Model):
        ...
        def __str__(self):
            return self.recipe.name
0 голосов
/ 31 декабря 2008

Да, вы можете (в виде точек bishanty), но будьте готовы к ситуации, когда вызывается __unicode__(), но FK еще не установлен. Я приходил в это несколько раз.

...