Django中的其他属性过滤属性对象(Admin)

时间:2015-06-11 18:26:31

标签: python django django-models django-admin

如何通过对象中的另一个属性(可能在模型中)过滤属性,这样就不必向对象访问的所有位置添加过滤。例如: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()

知道如何到达那里吗?

2 个答案:

答案 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")