簡體   English   中英

Django - 將 ModelChoiceField 限制為有效值

[英]Django - Restricting ModelChoiceField to valid values

模型.py:

class Comment(models.Model):
    user = models.ForeignKey(User)
    document = models.ForeignKey(Document)
    section = models.ForeignKey(Section, null=True, blank=True)
    description = models.TextField(null=True, blank=True)

Forms.py:

class CommentForm(ModelForm):
    class Meta:
        model = Comment
        fields = ('section', 'description')

每個評論都屬於文檔的一個部分。 每個文檔有許多部分。 但是,由 Django 打印的 ModelChoiceField 將包含所有文檔的部分。

如何告訴 Django 只打印屬於特定文檔的部分?

我查看了ModelFormSets - 更改查詢集,但我認為這不是我所追求的。

如果您需要做的只是調整管理站點,您可以覆蓋 django 管理員 class 上的formfield_for_foreignkey方法。

從文檔:

ModelAdmin.formfield_for_foreignkey(self,db_field, request, **kwargs)

ModelAdmin 上的 formfield_for_foreignkey 方法允許您覆蓋外鍵字段的默認表單字段。 例如,要根據用戶返回此外鍵字段的對象子集:

class MyModelAdmin(admin.ModelAdmin):
     def formfield_for_foreignkey(self, db_field, request, **kwargs):
        if db_field.name == "car":
            kwargs["queryset"] = Car.objects.filter(owner=request.user)
        return super(MyModelAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs)

這使用 HttpRequest 實例過濾 Car 外鍵字段以僅顯示 User 實例擁有的汽車。

我認為您想更改ModelChoiceField 的查詢集,而不是表單集的查詢集。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM