Подтвердить что ты не робот

Могу ли я использовать ForeignKey в возврате __unicode__?

У меня есть следующие классы: Ingredients, Recipe and 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... есть ли способ сделать это?

4b9b3361

Ответ 1

class RecipeContent(models.Model):
  ...
  def __unicode__(self):
    # You can access ForeignKey properties through the field name!
    return self.recipe.name

Ответ 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)

Ответ 3

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

Ответ 4

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

    class RecipeContent(models.Model):
        ...
        def __str__(self):
            return self.recipe.name