栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Django ForeignKey limit_choices_to一个不同的ForeignKey ID

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Django ForeignKey limit_choices_to一个不同的ForeignKey ID

经过数小时的阅读半相关的问题,我终于弄明白了。

您无法以我尝试的方式自我引用模型,因此无法通过limit_choices_to来使Django达到我想要的方式,因为它无法在同一模型中找到其他ForeignKey的ID。

如果您更改django的工作方式,显然可以做到这一点,但是解决此问题的一种更简单的方法是改为对admin.py进行更改。

这是现在我的models.py中的样子:

# models.pyclass MovieCategory(models.Model):        category = models.ForeignKey(Category)    movie = models.ForeignKey(Movie)    prefix = models.ForeignKey('Prefix', blank=True, null=True)    number = models.DecimalField(verbose_name='Movie Number', max_digits=2,blank=True, null=True, decimal_places=0)

我只是完全删除了limit_choices_to。我在这里找到了由凯尔·邓肯(Kyle
Duncan)发布的解决方案类似的问题。不过,不同之处在于,它使用的是ManyToMany而不是ForeignKey。这意味着我必须

filter_horizontal=('prefix',)
在班级下删除,
MovieCategoryAdmin(admin.ModelAdmin):
因为这仅适用于ManyToMany字段。

在admin.py中,我必须

from django import forms
在顶部添加一个表单。表单外观如下:

class MovieCategoryForm(forms.ModelForm):    class meta:        model = MovieCategory        fields = ['prefix']    def __init__(self, *args, **kwargs):        super(MovieCategoryForm, self).__init__(*args, **kwargs)        self.fields['prefix'].queryset = Prefix.objects.filter(       category_id=self.instance.category.id)

和我的AdminModel:

class MovieCategoryAdmin(admin.ModelAdmin):    """    Admin Class for 'Movie Category'.    """    fieldsets = [        ('Category',      {'fields': ['category']}),        ('Movie',         {'fields': ['movie']}),        ('Prefix',        {'fields': ['prefix']}),        ('Number',        {'fields': ['number']}),    ]    list_display = ('category', 'movie', 'prefix', 'number')    search_fields = ['category__category_name', 'movie__title', 'prefix__prefix']    form = MovieCategoryForm

凯尔(Kyle)正是在他的回答中描述了它,除了我必须添加

fields =['prefix']
到表单中否则它不会运行。如果您按照他的步骤进行操作,并记得删除filter_horizo​​ntal并添加您正在使用的字段,则应该可以使用。

编辑:此解决方案在编辑时效果很好,但在创建新条目时效果不佳,因为当一个人不退出时,它无法搜索类别ID。我正在尝试找出解决方法。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/625148.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号