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






class RecipeContent(models.Model):
...
def __unicode__(self):
# You can access ForeignKey properties through the field name!
return self.recipe.name
вздох ... это было так просто! показывает, какой я нуб ... Спасибо за ответ.
Использование Django 1.6. Я получаю: объект «NoneType» не имеет атрибута «имя». Метод: def __unicode __ (self): return self.instrument.name. И: класс Instrument (models.Model): name = models.CharField (max_length = 200). И где я называю "юникодом": instrument = models.ForeignKey (Instrument, null = True, blank = True)
Я тоже получил это. Я доволен, что это происходит, когда в некоторых экземплярах это есть, а в некоторых нет. В итоге мне пришлось промыть.
Да, можно (по пунктам), но будьте готовы к ситуации, когда вызывается __unicode__(), а FK еще не установлен. Я приходил в это несколько раз.
правда ... но, может быть, я смогу справиться с этим, используя что-нибудь вроде «if self.recipe.name: return self.recipe.name»?
Если вас интересует только название части рецепта, вы можете:
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)
В Python 3 нет __unicode__, вместо него нужно использовать __str__.
class RecipeContent(models.Model):
...
def __str__(self):
return self.recipe.name
Просто замечание о стиле, я бы рекомендовал вам не использовать множественное число в именах полей ForeignKey, поскольку они могут указывать только на одну запись за раз. Я имею в виду ваше поле ингредиентов в разделе RecipeContent.