class Report(models.Model):
# ....
product = models.ForeignKey(Product)
class Product(models.Model):
name = models.CharField(max_length=50)
class Item(models.Model):
box = models.ForeignKey(BoxInTransport)
product = models.ForeignKey(Product)
class BoxInTransport(models.Model):
transport = models.ForeignKey(Transport)
box = models.ForeignKey(Box)
這是 - 簡而言之 - 模型的結構。ModelForm中的Django濾波器與特定型號
而且我有一個觀點,它可以讓我創建新報告:
class ReportCreateView(CreateView):
model = Report
form_class = ReportForm
def get_form_kwargs(self):
# updating to get argument from url
kwargs = super(DifferenceCreateView, self).get_form_kwargs()
kwargs.update(self.kwargs)
return kwargs
和形式:
class ReportForm(ModelForm):
class Meta:
model = Report
fields = [
'product'
]
def __init__(self, box_nr=None, *args, **kwargs):
super(ReportForm, self).__init__(*args, **kwargs)
self.fields['product'].queryset = ???
我怎樣才能得到僅屬於一個特定的盒子,這些產品?爲了更清楚:
Item.objects.filter(box__box__box_code=box_nr)
現在,我得到我需要的所有項目,但我需要通過self.fields [「產品」]只產品形態與這個新的項目:
只產品查詢集。
你能幫我嗎?
編輯
我已經試過這樣的事情:
def __init__(self, box_nr=None, *args, **kwargs):
super(ReportForm, self).__init__(*args, **kwargs)
queryset = Item.objects.filter(
box__box__box_code=boxno
)
none_queryset = Product.objects.none()
list_or_products = [p.product for p in queryset]
product_queryset = list(chain(none_queryset, list_or_products))
self.fields['product'].queryset = product_queryset
但是,第一 - 它看起來有點醜陋:),第二 - 這是行不通的:
AttributeError: 'list' object has no attribute 'all'
你的表結構沒有多大意義。爲什麼'Item'有一個外鍵給'BoxInTransit' **,**'BoxInTransit'有一個外鍵給'Item'? – e4c5