小编one*_*or0的帖子

Django 1.9 JSONField order_by

我有以下包含JSONField的django模型:

class RatebookDataEntry(models.Model):
    data = JSONField(blank=True, default=[])
    last_update = models.DateTimeField(auto_now=True)

    class Meta:
        verbose_name_plural = 'Ratebook data entries'
Run Code Online (Sandbox Code Playgroud)

数据字段包含此JSON:

{
    "annual_mileage": 15000, 
    "description": "LEON DIESEL SPORT COUPE", 
    "body_style": "Coupe", 
    "range_name": "LEON", 
    "co2_gkm_max": 122, 
    "manufacturer_name": "SEAT"
}
Run Code Online (Sandbox Code Playgroud)

我可以通过其中一个数据字段对查询集进行排序吗?此查询不起作用.

RatebookDataEntry.objects.all().order_by("data__manufacturer_name")
Run Code Online (Sandbox Code Playgroud)

python django django-jsonfield django-1.9

10
推荐指数
5
解决办法
4893
查看次数

访问父类中的子类变量

从父类中的子类访问变量是否正确?这是一个很好的OOP方法吗?我不需要创建Animal类的实例,但是如果我愿意的话,该make_sound方法会引发AttributeError,这困扰着我.

class Animal:
    def make_sound(self):
        print(self.sound)

class Cat(Animal):
    sound = 'meow'

class Dog(Animal):
    sound = 'bark'

cat = Cat()
cat.make_sound()

dog = Dog()
dog.make_sound()
Run Code Online (Sandbox Code Playgroud)

python oop class

5
推荐指数
1
解决办法
791
查看次数

如何验证 pydantic 中的复杂列表类型?

为什么 pydantic 不验证 Foo 对象列表的参数,但当参数是基本类型列表时抛出 ValidationError ?

我可以强制执行复杂类型的验证吗?

验证不起作用:

from typing import List
from pydantic import BaseModel


class Foo(BaseModel):
    kind: str = "foo"

class Bar(BaseModel):
    kind: str = "bar"

class Spam(BaseModel):
    foos: List[Foo]

spam = Spam(foos=[Bar()])
print(spam.dict())

>>> {'foos': [{'kind': 'bar'}]}
Run Code Online (Sandbox Code Playgroud)

验证工作:

class Spam(BaseModel):
    foos: List[int]


spam = Spam(foos=[Bar()])
print(spam.dict())

pydantic.error_wrappers.ValidationError: 1 validation error for Spam
foos -> 0
  value is not a valid integer (type=type_error.integer)
Run Code Online (Sandbox Code Playgroud)

python validation pydantic

2
推荐指数
1
解决办法
1万
查看次数

我应该在Django模型中测试方法吗?

有没有理由测试模型方法,或者我应该假设Django正常工作并让他们未经测试?

这是我的模型和几个方法:

class SlackTeam(models.Model):
    ...

    def get_user(self, user_id):
        return self.users.filter(user_id=user_id).first()

    def deactivate(self):
        self.active = False
        self.initiator.access_token = ''
        self.initiator.save()
        self.initiator = None
        self.deactivated_at = timezone.now()
        self.save()

        if hasattr(self, 'slackbot'):
            self.slackbot.delete()

    def set_initiator(self, user):
        self.initiator = user
        self.save(update_fields=['initiator'])

    @classmethod
    def initialize(cls, team_id, name):
        return cls.objects.update_or_create(
            team_id=team_id, defaults={'name': name})[0]

    @classmethod
    def get_by_team_id(cls, team_id):
        return cls.objects.filter(team_id=team_id).first()
Run Code Online (Sandbox Code Playgroud)

python testing django unit-testing

1
推荐指数
1
解决办法
43
查看次数