Django形成ModelChoiceField,按类别和项目过滤

时间:2018-06-20 06:23:54

标签: django django-filter modelchoicefield

在我的模型(费用)中,我定义了类别,希望将其用作其他应用程序(食品)的创建形式中的预设/默认值。

奇怪的是,当前代码输出的是用户名列表,而不是费用类别(以及我要的行,但我想要的是项目而不是费用模型的expense_category)。

如果我在ModelChoiceField查询集的末尾应用.all(),我什么也得不到(可能是我做错了事)。

Foods App-> Forms.py

class FoodForm(forms.ModelForm):
    item = forms.ModelChoiceField(queryset=Expense.objects.filter(expense_type='Food'))

class Meta():
    model = Food
    fields = ['item','servings','calories','create_date']

Foods App-> views.py

class FoodCreateView(LoginRequiredMixin, CreateView):
    model = Food
    fields = ['item','servings','calories','create_date']
    login_url = 'accounts/login.html'

    # Filter by User
    def form_valid(self, form):
        form.instance.user = self.request.user
        return super(FoodCreateView, self).form_valid(form)

费用应用-> models.py

class Expense(models.Model):
    BILLS = 'Bills'
    FOOD = 'Food'
    PERSONAL = 'Personal Care'
    MISC = 'Misc'

    CATEGORY = (
        ('Food','Food'),
        ('Bills','Bills'),
        ('Personal Care','Personal Care'),
        ('Misc','Misc'),
        )

    user = models.ForeignKey(User, related_name='exp_user')
    amount = models.IntegerField()
    item = models.CharField(max_length= 50)
    expense_type = models.CharField(max_length =15, choices=CATEGORY, default=FOOD)
    create_date = models.DateField(default=datetime.date.today)

如果可以按“食物”的费用类型过滤,然后按item

填充,那将是理想的选择

我还猜测以表格形式进行此操作可能不合适。

我认为我需要添加类似于

的内容
self.fields['item'] = Expense.objects.filter(expense_type = 'Food')

,但是在被用户过滤之后,我不确定在哪里或如何使用。任何文件或其他阅读资料都肯定会有所帮助,因为我敢肯定我会错过一些明显的东西。

谢谢

0 个答案:

没有答案