我正在使用django 1.8和带有角度前端的REST 3.0。
我在我的模型上的两个字段的元类上设置了unique_together。 它不能很好地工作,因为它不允许field1和field2为null的多个情况。 我需要这些字段都是可选的 或者如果一个人有一个值,那么另一个人也必须有一个值。 它们应该是唯一的(unique_together)
到目前为止我所拥有的是荒谬和丑陋的。我不知道如何更好或更有效地写它,但是我想学习如何以更加Pythonic的方式做到这一点。
data = json.loads(request.body)
#field1 and field2 are nested in an array that is only POSTed if it exists.
if 'key' in 'data':
field1 = data[key].get(field1,"")
field2 = data[key].get(field2,"")
elif 'key' not in 'data':
field1 = ""
field2 = ""
if field1=="" and field2=="":
field1 = None
field2 = None
elif (field1 == "") and (field2 != ""):
data.errors += 'You added field 2 but did not add field 1.'
elif (field1 !="") and (field2 ==""):
data.errors += 'You added field 1 but did not add field 2.'
elif (field1 = "") and (country_code!=""):
try:
field1Db = [model].objects.get(field1=field1)
except [model].DoesNotExist:
valid_field1 = True
else:
if field1Db and ((field1Db.field2)) == (field2):
data.errors += Field 1 + 'and' + Field 2 + 'should form a unique set if both are submitted.'
else:
data.errors = False
data.success = True
return Response(data)
它似乎有效,只是丑陋。
在此之后,我将数据发送到序列化程序。 无论如何,如果有人知道如何更有效地做到这一点,我真的很感激学习如何。谢谢。
答案 0 :(得分:1)
使用unique_together
验证提供两个值时的情况。然后在模型中添加clean
方法,以确保提供这两个值,或者两者都不提供。
class MyModel(models.Model):
...
def clean(self):
"""
Make sure that if field1 or field2 is specified,
then they are both specified.
"""
if self.field1 is not None and self.field2 is None:
raise ValidationError('you must specify field2 if you specify field1')
elif self.field1 is None and self.field2 is not None:
raise ValidationError('you must specify field1 if you specify field2')