如何通过对象中的另一个属性(可能在模型中)过滤属性,这样就不必向对象访问的所有位置添加过滤。例如:Django Admin,Rest Framework中的ViewSet等等。但显然,这可能是不可能的......
我有以下型号:
class Food(models.Model):
# ...
pass
class Weight(models.Model):
# ...
food = models.ForeignKey('Food')
class Ingredient(models.Model):
food = models.ForeignKey(Food, null=False)
amount = models.DecimalField(decimal_places=2, max_digits=5)
weight = models.ForeignKey(Weight)
note = models.CharField(max_length=200, null=True, blank=True)
我想在“成分”下列出可能的“权重”列表,仅显示包含我选择的“食物”的权重,而不是Weight.objects.all()
知道如何到达那里吗?
答案 0 :(得分:1)
假设您想要更新Django Admin中的内容,您可能需要在添加新对象时使用Ajax,因为Food是未知的,直到有人做出选择。此时,您可以使用jQuery或类似的东西更新Weight小部件中的可用选项。
有很多方法可以在Django中编辑可用列表,查看formfield_for_dbfield(允许您分配Widget然后再查询集),但是您需要首先通过get_form设置对象信息。如果有人进来编辑对象并更改了所选择的食物,这可能变得复杂并且会使事情变得混乱。然后你再次需要ajax来重写可用的选项。
由于您的需求是动态的,我认为ajax小部件可能是您最好的选择。
答案 1 :(得分:0)
Ingredient.weight_set.filter(food_name="apple")