0
3つのテーブルからフィールドをフィルタリングしようとしています。 私はリストとして1テーブルを、条件付きで2テーブルを結合する必要があります。 私はDjangoの1.9.4は、MySQL 5.6.17Django 1.9.4条件付き3つのモデルでmany-to-oneフィルタリング
を持っている。これは私のmodels.pyである:私はすべての製品を取得する必要がある
class Products(models.Model):
fullname = models.CharField(max_length=250, db_index=True)
code = models.CharField(max_length=15, db_index=True, null=True)
authors = models.CharField(max_length=300, db_index=True, null=True)
...
def __str__(self):
return self.fullname
class Barcodes(models.Model):
product = models.ForeignKey(Products, on_delete=models.CASCADE)
barcode = models.CharField(max_length=25, db_index=True, null=True)
def __str__(self):
return self.barcode
class Prices(models.Model):
product = models.ForeignKey(Products, on_delete=models.CASCADE)
price = models.FloatField(default=0)
shop_id = models.IntegerField(default=0)
shop_name = models.CharField(max_length=50, null=True)
def __str__(self):
return self.shop_name
、GROUP_CONCAT(個別のバーコード)に入社し、shop_id = 1と価格に入社し、
def get_queryset(self):
return Products.objects.values('id', 'fullname', 'authors', 'code', 'theme').annotate(barcodes=Concat('barcodes__barcode'))
をさらに集約関数を使用します: - 価格の文字列が存在しない場合は、戻り価格= 0
私はそのようにした
をclass Concat(Aggregate):
function = 'GROUP_CONCAT'
template = '%(function)s(%(distinct)s%(expressions)s)'
def __init__(self, expression, distinct=False, **extra):
super(Concat, self).__init__(
expression,
distinct='DISTINCT ' if distinct else '',
output_field=models.CharField(),
**extra)
shop_id = 1で価格を追加するにはどうすればよいですか?
ありがとうございました。