【问题标题】:Only allow leaf category as a choice - Django只允许叶类别作为选择 - Django
【发布时间】:2012-05-01 17:20:05
【问题描述】:

我有以下型号:

class Category(models.Model):
    name = models.CharField(max_length=200)
    slug = models.SlugField()
    parent = models.ForeignKey('self', blank = True, null = True, related_name="children")

class Business(models.Model):
    user = models.OneToOneField(User)
    name = models.CharField(max_length=200)
    slug = models.SlugField()
    category = models.ForeignKey(Category)
    city = models.ForeignKey(City)

使用 modelForm 添加业务时,非叶子类别会显示在选择框中。

例如,假设我们有以下类别层次结构:

- Cars
     -- Car Rental
     -- Car Dealership
     -- Mechanics
- Restaurants
    -- Burgers
    -- Chinese
    -- Sushi
    -- Pizza
    -- Latin american
         -- Mexican
         -- Venezuelan
         -- Argentinian

使用此层次结构,除汽车、餐厅和拉丁美洲之外的所有选项都应显示在类别选择框中,因为它们具有子类别。

【问题讨论】:

    标签: django


    【解决方案1】:
    Category.objects.filter(children__isnull=True)
    
    
    class MyModelForm(forms.ModelForm):
        def __init__(self, *args, **kwargs):
            super(MyModelForm, self).__init__(*args, **kwargs)
            self.fields['myfield'].queryset = Category.objects.filter(children__isnull=True)
    

    【讨论】:

    • 在给定的示例中是否有 child 字段?
    • @orokusaki,哎呀,这是children。我以为我看到的都是“ch”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-26
    • 2018-08-01
    • 2021-07-13
    • 2016-01-04
    • 1970-01-01
    相关资源
    最近更新 更多