我有一个多对多的自引用关系,其中包括一个直通模型。产品由其他产品组成,包括一定数量(例如,螺钉由铁棒制成)。我制作了贯通模型,尽管似乎无法访问贯通模型中的“金额”字段:
型号代码:
<div id='calendar'></div>
<script>
$('#calendar').fullCalendar({
events: [
{
title : 'event1',
start : '2019-03-20'
},
{
title : 'event2',
start : '2019-03-15',
end : '2019-03-18'
}
],
})
</script>
我尝试了许多其他查询,但是如您所见,它们似乎失败了。我知道我想念一些东西,但是我无法将手指放在上面。
from django.db import models
class Product(models.Model):
name = models.CharField(max_length=200, unique=True)
produced = models.IntegerField(default=0)
speed = models.IntegerField()
type = models.CharField(max_length=200)
ingredients = models.ManyToManyField('self', through='RecipeComponent', symmetrical=False)
def __str__(self):
return self.name
class RecipeComponent(models.Model):
item = models.ForeignKey(Product, on_delete=models.CASCADE, related_name="item")
ingredient = models.ForeignKey(Product, on_delete=models.CASCADE, related_name="ingredient")
amount = models.IntegerField()
def __str__(self):
return str(self.amount) + " of " + self.ingredient.name
答案 0 :(得分:0)
screw.ingredients.all()[0]
是产品,如果您尝试:
screw.ingredients.all()[0].amount
您正在尝试访问amount
的{{1}}属性,该属性没有此属性。因此出现错误:
Product
如果您想获得描述某种关系的金额,可以:
>>> AttributeError: 'Product' object has no attribute 'amount'.
或者您想知道有多少种不同的成分带有螺丝:
relation_data = RecipeComponent.objects.get(product=screw, ingredient=wood)
relation_data.amount # The amount of wood for screw.
答案 1 :(得分:0)
您可以在 Product 类中创建一个方法来返回给定成分的数量:
class Product(models.Model):
...
...
def get_amount_of_ingredient(self, ingredient):
try:
return RecipeComponent.objects.get(item=self, ingredient=ingredient).amount
except RecipeComponent.DoesNotExist:
return 0
然后从 screw
对象调用它:
screw.get_amount_of_ingredient("iron_rod")