我的模型(简化)
我们有旅游团:
class Tour(models.Model):
name = models.CharField(max_length=100)
strecke = models.ManyToManyField(Strecke, through="Streckenreihenfolge")
巡视路线包含以下部分:
class Strecke(models.Model):
name = models.CharField(max_length=100)
auftrag = models.ForeignKey("Auftrag", on_delete=models.CASCADE, null=True, blank=True)
各部分按顺序排列
class Streckenreihenfolge(models.Model):
strecke = models.ForeignKey(Strecke, on_delete=models.CASCADE)
tour = models.ForeignKey("Tour", on_delete=models.CASCADE)
reihenfolge = models.IntegerField()
在我的管理中,我想对显示哪些部分(Strecke)进行一些限制。我考虑过使用formfield_for_foreignkey。它会被调用,但对选项没有任何影响:
@admin.register(Tour)
class TourAdmin(admin.ModelAdmin):
class StreckenreihenfolgeAdminInline(admin.TabularInline):
model = Streckenreihenfolge
autocomplete_fields = ["strecke"]
ordering = ["reihenfolge"]
extra = 0
def formfield_for_foreignkey(self, db_field, request, **kwargs):
print(db_field.name)
if db_field.name == 'strecke':
kwargs['queryset'] = Strecke.objects.filter(auftrag_id__exact=8)
return super().formfield_for_foreignkey(db_field, request, **kwargs)
inlines = [StreckenreihenfolgeAdminInline, ]
formfield_for_foreignkey不适用于多对多字段吗?
- 更新**在此处找到更多信息:Django Admin - Filter ManyToManyField with through model显然formfield_for_manytomany不适用于内联表单。
然后我尝试使用get_queryset(),它减少了查询集,但不知何故,自动完成值仍然没有过滤。
也许这张图更能说明我想要达到的目标:
2条答案
按热度按时间qf9go6mv1#
formfield_for_foreignkey
方法仅适用于外键字段。对于ManyToManyFields,您可以在内联管理中使用formfield_for_manytomany
方法。vq8itlhq2#
终于在这里找到了答案:https://forum.djangoproject.com/t/django-admin-autocomplete-field-search-customization/7455/5
这将生成以下代码: