![](/img/trans.png)
[英]How to work with ManytoManyField with through relation in django-rest-framework
[英]Django Rest Framework - serializing a ManyToManyField with the default 'through'
您好,我是DRF的新手,可以使用外键对表进行序列化,但是在涉及多对多字段的情况下,在这种情况下:
包<> Package_product_atom <> Product_atom
我将如何进行序列化? 到目前为止,我正在尝试的是:
class Product_atomSerializer(serializers.ModelSerializer):
class Meta:
model = Product_atom
ready_only = True
fields = ('id','title', 'title_override', 'price', 'price_override', 'description', 'description_override','image', 'image_override' ,'tags', 'product_alt', 'date_modified', 'date_created')
class PackageSerializer(serializers.ModelSerializer):
atomics = Product_atomSerializer(many=True)
class Meta:
model = Package
ready_only = True
fields = ('id', 'title', 'price', 'discount', 'image', 'tags', 'atomics', 'date_modified', 'date_created')
我的模型是:
class Product_atom(models.Model):
title = models.CharField(max_length=255, blank=False)
title_override = models.BooleanField(default=False, blank=False)
price = models.SmallIntegerField(default=0, blank=False)
price_override = models.BooleanField(default=False, blank=False)
description = models.TextField(blank=True)
description_override = models.BooleanField(default=False, blank=False)
image = models.ImageField(upload_to = 'uploads', default = '', blank=True)
image_override = models.BooleanField(default=False, blank=False)
tags = models.CharField(max_length=255, blank=False)
active = models.BooleanField(default=True, blank=False)
date_created = models.DateTimeField(auto_now_add=True)
date_modified = models.DateTimeField(auto_now=True)
product_alt = models.ForeignKey(Product_alt, related_name='atomics', on_delete=models.CASCADE)
default_provider = models.ForeignKey(Provider, on_delete=models.CASCADE)
def __str__(self):
return "{}".format(self.title)
class Package(models.Model):
title = models.CharField(max_length=255, blank=False)
price = models.SmallIntegerField(default=0, blank=False)
discount = models.SmallIntegerField(default=10, blank=False)
image = models.ImageField(upload_to = 'uploads', default = '', blank=True)
tags = models.CharField(max_length=255, blank=False)
active = models.BooleanField(default=True, blank=False)
date_created = models.DateTimeField(auto_now_add=True)
date_modified = models.DateTimeField(auto_now=True)
zone = models.ForeignKey(Zone, on_delete=models.CASCADE)
product_atom = models.ManyToManyField(Product_atom)
def __str__(self):
return "{}".format(self.title)
如果这是一个ForeignKey关系,那会起作用,但是我无法使用ManyToManyField来运行它,我得到的错误是:
AttributeError:尝试在序列化程序
PackageSerializer
上获取字段atomics
的值时,出现atomics
。 序列化程序字段的名称可能不正确,并且与Package
实例上的任何属性或键都不匹配。 原始异常文本为:“包装”对象没有属性“原子”。
序列化一对多关系之前,我遇到了这个错误,但是使用related_name修复了它。 是否会通过使用放置自定义模型并向其中添加related_name来解决问题? 谢谢!
您是否尝试过将变量名“ atomics”更改为“ product_atom”?
根据您的Package类,“ product_atom”没有相关名称“ atomics”。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.