我有一个问题,我有两个表
class Car(models.Model):
brand = models.ForeignKey(Brand, on_delete=models.CASCADE)
year = models.IntegerField(null=False, default=None)
begin = models.DateTimeField(default=None, blank=True)
class Brand(models.Model):
name = models.CharField(max_length=64, default=None)
然后,我尝试使用这个进行序列化:
car_query = Car.objects.filter(year=1984)
car_json = serializers.serialize('json', car)
car = json.loads(car_json)
它有效,但我只有表 Brand 中条目的 id。我想要的是可变汽车内的品牌名称。
我想尝试一下:
car_query = Car.objects.filter(year=1984).values('year', 'begin', 'brand__name')
在这种情况下,我有一个值查询集,然后当我尝试这个时:
car_json = serializers.serialize('json', car_query)
car = json.loads(car_json)
我得到了这个:{AttributeError}'dict'对象没有属性'_meta'
因为car_query不是查询集而是valuesqueryset,这就是问题所在。
所以我尝试这个 car_json = json.dumps(car_query)
但我有一些日期时间,但它不起作用,所以我决定尝试这个:
json.dumps(car_query, sort_keys=True, indent=1, cls=DjangoJSONEncoder)
但是它不起作用。这很奇怪,因为当我使用 serializers.serialize
时,日期时间的格式很好,但是当我使用 json.loads
时,我有一些 datetime
。
我精确地说,我的目标只是在最后有一个变量car
,其中包含表Car
的所有字段和字段name
> 表品牌
。
最佳答案
您可以创建模型方法来获取品牌名称
class Brand(models.Model):
name = models.CharField(max_length=64, default=None)
class Car(models.Model):
brand = models.ForeignKey(Brand, on_delete=models.CASCADE)
year = models.IntegerField(null=False, default=None)
begin = models.DateTimeField(default=None, blank=True)
def get_brand(self):
return self.brand.name
并在serializers.py中,将模型方法添加到字段中
class CarSerializer(serializers.ModelSerializer):
class Meta:
model = Car
fields = [field.name for field in Car._meta.fields]
fields += ['get_brand']
关于python - 如何使用外部字段序列化查询集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56480914/