python - 如何使用外部字段序列化查询集?

标签 python django python-3.x serialization

我有一个问题,我有两个表

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/

相关文章:

mysql - Django:MySQL 查询运行非常慢,但直接针对数据库运行时速度很快(不通过 Django)

python - 如何在 Django FileField/CharField/BooleanField/Upload 按钮上使用 Bootstrap

python - 为什么我的程序不读取引用文件(文件名)中的第一行代码?

python - Pyspark - Python3 使用 configparser 从文件中获取变量

python-3.x - 无法使用 pip3 安装 DjangoRestFramework?

python - 这里有人尝试过使用 iSeries Python 端口吗?

python - salt 定制 Cereal

django.db.utils.OperationalError : FATAL: database does not exist (postgres/deploy to digitalocean)

python - Matplotlib 错误栏,倾覆不起作用?

python - 使用 BeautifulSoup 抓取 aspx 网站