gpt4 book ai didi

python - 如何在 Tastypie 中验证唯一的在一起约束?

转载 作者:行者123 更新时间:2023-11-28 19:22:46 25 4
gpt4 key购买 nike

我有一个带有 unique_togeter = True 的模型,我正在使用 ModelForm 来验证它。

模型.py

class Restrict(BaseModel):
user = models.ForeignKey(User)
title = models.ForeignKey('title')
active = models.BooleanField(default=True)
created = models.DateTimeField(auto_now_add=True, default=datetime.now())
updated = models.DateTimeField(auto_now=True, default=datetime.now())

class Meta:
ordering = ["id"]
db_table = "editor_restrict"
app_label = "geral"
unique_together = ('user', 'title')

资源.py

class TitleResource(ModelResource):

class Meta:
queryset = Titulo.objects.all()
always_return_data = True
fields = ['name']


class UserResource(ModelResource):

class Meta:
queryset = User.objects.all()
fields = ['username', 'email', 'first_name']
authentication = Authentication()
authorization = Authorization()
always_return_data = True
filtering = {
'username': ALL,
}


class RestrictResource(ModelResource):
user = fields.ForeignKey(UserResource, attribute='user', full=True)
title = fields.ForeignKey(TitleResource, attribute='title')

class Meta:
authentication = Authentication()
authorization = Authorization()
queryset = Restrict.objects.all()
resource_name = 'restrict'
always_return_data = True
fields = ['user', 'title', 'active']
serializer = Serializer()
validation = FormValidation(form_class=RestrictForm)
filtering = {
'user': ALL_WITH_RELATIONS,
}

当我做这样的 POST 时效果很好:

curl -H 'Content-Type: application/json' -X POST --data '{"active": true, "title": "/api/v1/titulo/16/", "user":"/api/v1/user/52831/"}' 'http://localhost:8000/api/v1/restrict/'

响应是状态代码:400 BAD REQUEST,正如预期的那样。

但是像这样的完整用户:

curl -H 'Content-Type: application/json' -X POST --data '{"active": true, "title": "/api/v1/titulo/16/", "user": {"username": "johnny@mail.com", "email": "johnny@mail.com", "first_name": "Johnny"}}' 'http://localhost:8000/api/v1/restrict/'

我收到 TypeError Exception int() argument must be a string or a number, not 'dict' from django.

UserResource 在所有 CRUD 中也工作得很好。

如果我从 Model 中去掉 unique_together,这个 POST 也能正常工作。

我试过调试,但我不知道发生了什么。

问题是:我如何验证这种情况并返回正确的响应?

谢谢。

最佳答案

  1. 可能的问题:在 mysql 中,unique together 转换为 unique constraint,如果至少有一个列为空,则它允许重复。
  2. 添加标题默认值,或限制为非空(如果您将空值设置为空可能会导致 1.)。
  3. 尝试将一些调试信息添加到 RestrictResource 保存,这样您将看到哪个字典出现在 foregn int 字段中。

关于python - 如何在 Tastypie 中验证唯一的在一起约束?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21043846/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com