Как вы выбираете категорию, из которой каждая запись будет собирать подкатегории для выбора? Модель Posts
не имеет поля, относящегося к Category
.
Если логика выбора категории обслуживания внешняя для каждой записи Posts
, вы можете использовать этот фрагмент для достижения этой цели (с здесь )
@admin.register(Posts)
class PostsAdmin(admin.ModelAdmin):
# (...)
def formfield_for_foreignkey(self, db_field, request, **kwargs):
if db_field.name == "subcat":
kwargs["queryset"] = Subcategory.objects.filter(cat__cat=['Django'])
return super().formfield_for_foreignkey(db_field, request, **kwargs)
Однако (и, возможно, это именно то, что вы действительно пытаетесь получить), если вы хотите, чтобы в каждом сообщении была фильтрация его подкатегории по определенной категории, вы можете сначала добавить поле категории в его модель:
class Posts(models.Model):
title=models.CharField(max_length=15)
cat=models.ForeignKey(Category,on_delete=models.CASCADE,null=True)
subcat=models.ForeignKey(Subcategory,on_delete=models.CASCADE,null=True)
def __str__(self):
return self.title
Затем вы можете отфильтровать набор запросов que, используя пользовательскую форму (с здесь ):
class PostsAdminForm(forms.ModelForm):
class Meta:
model = Posts
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
# use the following for python 2 instead
# super(PostsAdminForm, self).__init__(*args, **kwargs)
self.fields['subcat'].queryset = Subcategory.objects.filter(
cat__id=self.instance.cat.id)
@admin.register(Posts)
class PostsAdmin(admin.ModelAdmin):
# (...)
form = PostsAdminForm