Posso usar um ForeignKey em troca __unicode__?

votos
12

Eu tenho as seguintes classes: Ingredientes, receita e 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()

mas para __ __unicode () in RecipeContent eu gostaria de usar o nome da receita a que este RecipeContent pertence ... há uma maneira de fazê-lo?

Publicado 27/12/2008 em 20:58
fonte usuário
Em outras línguas...                            


4 respostas

votos
26

class RecipeContent(models.Model):
  ...
  def __unicode__(self):
    # You can access ForeignKey properties through the field name!
    return self.recipe.name
Respondeu 27/12/2008 em 21:02
fonte usuário

votos
2

Se você só se preocupam com a parte do nome da receita, você pode fazer:

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)
Respondeu 16/07/2011 em 02:01
fonte usuário

votos
0

Em Python 3 não existe __unicode__, você precisa usar __str__em seu lugar.

    class RecipeContent(models.Model):
        ...
        def __str__(self):
            return self.recipe.name
Respondeu 12/01/2018 em 02:32
fonte usuário

votos
0

Sim, você pode (como bishanty pontos), mas estar preparado para a situação quando __unicode__()é chamado, mas FK não está definido ainda. Eu vim a este algumas vezes.

Respondeu 31/12/2008 em 19:31
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more