gpt4 book ai didi

python - 为反向关系查找实现 django-filter MultipleModelChoiceField?

转载 作者:行者123 更新时间:2023-11-28 19:03:53 25 4
gpt4 key购买 nike

我一直在为我的一个项目使用 django-filters。根据文档,我为我的产品模型实现了一个产品过滤器(用于颜色和 Material )。但经过多次尝试,我仍然无法实现反向查找另一个表 ProductSize 中的产品尺寸。

models.py

class Product(models.Model):
product_name = models.CharField(max_length=500)
product_color = models.ForeignKey(Colour,related_name='productcolor')
product_material=models.ForeignKey(Material)

def __str__(self):
return self.product_name

class ProductSize(models.Model):
product=models.ForeignKey('Product',related_name='details')
value = models.CharField(max_length=50)
stock= models.IntegerField(default=1)
items_sold = models.IntegerField(default=0)
description = models.TextField(blank=True)

def __unicode__(self):
return self.value

class Colour(models.Model):
colour=models.CharField(max_length=100)
colour_code=models.CharField(max_length=100,null=True,blank=True)

def __unicode__(self):
return u'%s' %self.colour

class Material(models.Model):
material=models.CharField(max_length=100)

def __unicode__(self):
return u'%s' %self.material

filters.py

class ProductFilter(django_filters.FilterSet):
product_material=django_filters.ModelMultipleChoiceFilter(
queryset=Material.objects.all(),
widget=forms.CheckboxSelectMultiple
)
product_color=django_filters.ModelMultipleChoiceFilter(
queryset=Colour.objects.all(),
widget=forms.CheckboxSelectMultiple
)

class Meta:
model = Product
fields=['product_color','product_material']

views.py

def product_view(request):
product=Product.objest.all()
f = ProductMaterialFilter(request.GET, queryset=product)
context={'filter':f,}
return render(request,'product.html',context)

Django 版本:

django versions==1.10.8
django-filter==1.1.0

我需要知道通过 ProductSize 模型的“值”为 ProductFilter 过滤尺寸的步骤。

See here .

如有任何帮助,我们将不胜感激。

最佳答案

模型.py

from django.db import models


class Colour(models.Model):
colour = models.CharField(max_length=100)
colour_code = models.CharField(max_length=100,null=True,blank=True)

def __unicode__(self):
return u'%s' %self.colour


class Material(models.Model):
material = models.CharField(max_length=100)

def __unicode__(self):
return u'%s' %self.material


class Size(models.Model):
value = models.CharField(unique=True, max_length=4)

def __unicode__(self):
return self.value


class Product(models.Model):
product_name = models.CharField(max_length=500)
product_color = models.ForeignKey(Colour,related_name='productcolor')
product_material = models.ForeignKey(Material)

def __str__(self):
return "{} ({}, {})".format(self.product_name, self.product_color, self.product_material)


class Stock(models.Model):
product = models.ForeignKey('Product', related_name='details')
size = models.ForeignKey('Size')
stock = models.IntegerField(default=1)
items_sold = models.IntegerField(default=0)
description = models.TextField(blank=True)

def __unicode__(self):
return "{product_name}({material}, {color}) @size: {size}, available {available} out of: {stock}".format(
product_name=self.size.value,
material=self.product.product_material.material,
color=self.product.product_color.colour,
size=self.size.value,
available=self.stock-self.items_sold,
stock=self.stock
)

过滤器.py

import django_filters
from django import forms

from products.models import Material, Colour, Stock, Size


class ProductFilter(django_filters.FilterSet):
product__product_material = django_filters.ModelMultipleChoiceFilter(
queryset=Material.objects.all(),
widget=forms.CheckboxSelectMultiple
)
product__product_color = django_filters.ModelMultipleChoiceFilter(
queryset=Colour.objects.all(),
widget=forms.CheckboxSelectMultiple
)

size = django_filters.ModelMultipleChoiceFilter(
queryset=Size.objects.all(),
widget=forms.CheckboxSelectMultiple
)

class Meta:
model = Stock
fields = ['product__product_color', 'product__product_material', 'size']

演示:

https://github.com/andilabs/filters-demo

关于python - 为反向关系查找实现 django-filter MultipleModelChoiceField?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49297935/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com