本人在开发一个微信商城小程序,用的是django,现在在用django内置的sqlite创建后台数据库,在modles里建表的时候碰到了问题。
我想在以下这个model(GoodsDetail)里面的pics项中插入另外一个model(Goods_Pics)的全部内容。目前的代码如下:
class GoodsDetail(models.Model):
"商品表"
goods_id =models.CharField(verbose_name='商品编号',max_length=32,null=False )
cat_id=models.CharField(verbose_name='分类ID',max_length=32,null=False)
goods_name=models.CharField(verbose_name='商品名称', max_length=100,null=False)
goods_price=models.PositiveIntegerField(verbose_name='商品价格',null=False)
goods_number=models.PositiveIntegerField(verbose_name='商品数量',null=False)
goods_introduce=models.CharField(verbose_name='商品简介',max_length=200,null=True)
pics=models.ManyToManyField('Goods_Pics')
class Goods_Pics(models.Model):
"商品图片表"
pics_id=models.CharField(verbose_name='图片ID',max_length=200,null=True,unique=True)
goods_id=models.ForeignKey('GoodsDetail',verbose_name='商品ID',max_length=200,on_delete=models.CASCADE,null=True)
pics_big=models.URLField(verbose_name='商品大图链接',null=True)
pics_mid = models.URLField(verbose_name='商品中图链接', null=True)
pics_sma = models.URLField(verbose_name='商品小图链接', null=True)
但是用manytomanyfield会创立一个新表goodsdetail_pics,而且返回内容也只有一个ID。目前返回的内容如图1, 想要返回的内容如图2所示,请问该怎么做?
图1
图2
是不是你的类的顺序写的有问题啊
Goods_Pics这个类写在GoodsDetail这个类的上面,调换位置试一下
执行pics语句的时候,Goods_Pics这个类还没加载!
参考:
首先不知道你的查询语法怎么写的
其次你已经有good_id这个外键字段了, 可以基于双下划线进行跨表查询。
val = User_vote.objects.filter(user_id=user, obs_id=obsid,
vote_date__range=(strToDate(start_date), strToDate(end_date))).values(
'vote_filename__file_name', 'vote_date', 'vote_filename__type', 'vote_filename__dm',
'vote_filename__snr', 'vote_filename__toa', 'vote_type').order_by('vote_date')
注意看values里面,vote_filename就是你的goods_id这个外键字段,通过vote_filename__dm 可以获取到关联外键的dm字段。
Django-ORM模型层语法(四)之多表操作准备工作_Aτθ的博客-CSDN博客
Django-ORM模型层语法(八)多表查询之联表查询(基于双下划线的跨表查询)_Aτθ的博客-CSDN博客_django联表查询
简单,你写序列化的时候表明一下pics啊
class GoodsDetailSerializer(serializers.ModelSerializer):
pics = GoodsPicSerializer(many=True) # 这个是你的图片模型的序列化
class Meta:
model = GoodsDetail
fields = '__all__' # 全部字段输出
pics=models.ManyToManyField('Goods_Pics')
改成pics=models.ManyToManyField(Goods_Pics)
,不加引号的吧,然后Goods_Pics类要放在GoodsDetail前面