Django表单查询集:不包括现有记录

Django表单查询集:不包括现有记录,django,forms,django-queryset,Django,Forms,Django Queryset,在Django,我有以下模型:一个是分店,另一个是基本水果,另一个是每个分店出售的水果: from django.db.models import Q class Branch(models.Model): name = models.CharField(...) ... class Fruit(models.Model): name = models.CharField() ... class BranchFruit(models.Model):

在Django,我有以下模型:一个是分店,另一个是基本水果,另一个是每个分店出售的水果:

from django.db.models import Q

class Branch(models.Model):
    name = models.CharField(...)
    ...

class Fruit(models.Model):
    name = models.CharField()
    ...

class BranchFruit(models.Model):
    branch = models.ForeignKey(Branch)
    fruit = models.ForeignKey(Fruit)
    ...

    class Meta:
        unique_together = ('branch', 'fruit')
提供了一个用于添加新水果的表单,查询集应排除该商店中已有的水果。我正在考虑使用以下方法:

表格:

views.py包含:

if request.method=='GET':
    branch = request.user.branch   # The branch shop the user belongs to
    return render(request, template, {'branchFruitForm':BranchFruitForm(branch)})
但是BranchRuitForm在
excludes
语句中失败,并显示以下消息:

int() argument must be a string or a number, not 'Branch'

如何修复它?

我认为它需要的是ID而不是对象。尝试构建一个ID列表并将其传入。

在此行中 excludes=BranchFruit.objects.filter(branch=args)

试试这个
excludes=BranchFruit.objects.filter(branch\u id\u in=[args])

我最终得到了以下解决方案:

def __init__(self, branch, *args, **kwargs):
    super(BranchFruitForm, self).__init__(*args, **kwargs)
    branchFruits = BranchFruit.objects.filter(branch_id=branch.id)
    excludes = [fruit.fruit.id for fruit in branchFruits]
    self.fields['fruit'].queryset = Fruit.objects.all().exclude(id__in=excludes)

非常感谢,伙计们。

此外,您可以简单地执行self.fileds[“fruits”].queryset=Fruit.objects。all().exclude(id_uuin,*listofids)
def __init__(self, branch, *args, **kwargs):
    super(BranchFruitForm, self).__init__(*args, **kwargs)
    branchFruits = BranchFruit.objects.filter(branch_id=branch.id)
    excludes = [fruit.fruit.id for fruit in branchFruits]
    self.fields['fruit'].queryset = Fruit.objects.all().exclude(id__in=excludes)