我有一些模型,我想过滤掉特定字段,但我不断收到错误:无法解析关键字'Unique'到字段中。选择是:父,id,唯一。这是我的模型和我的过滤器查找:
#models
class Parent(models.Model):
parent_name = models.CharField(max_length=30)
objects = models.Manager()
class Unique(models.Model):
unique_name = models.CharField(max_length=10)
parent = models.ForeignKey(Parent, on_delete=models.CASCADE)
objects = models.Manager()
class Name(models.Model):
name_name = models.CharField(max_length=20)
unique = models.ForeignKey(Unique, on_delete=models.CASCADE)
objects = models.Manager()
class Item(models.Model):
item_name = models.CharField(max_length=30)
name = models.ForeignKey(Name, on_delete=models.CASCADE)
objects = models.Manager()
以下是我一直在尝试的查询:
if Parent.objects.filter(parent_name__iexact = new_parent.parent_name,
unique__unique_name__iexact = new_unique.unique_name,
unique__name__name_name__iexact = new_name.name_name,
unique__name__item__item_name__iexact = new_item.item_name).exists():
我想确保数据库中存在跨越ForeignKey关系的某些模型。 New_变量是表单输入。
编辑:我让代码工作,我一定搞砸了一些非常小的东西。目前的代码有效,我将从现在开始使用PEP8来更好地发现错误,谢谢:)
答案 0 :(得分:1)
如果使用PEP8建议和Django良好实践重写代码,它应如下所示:
class Parent(models.Model):
parent = models.CharField(max_length=30)
class Unique(models.Model):
unique = models.CharField(max_length=10)
parent = models.ForeignKey(Parent, on_delete=models.CASCADE, related_name='uniques')
class Name(models.Model):
name = models.CharField(max_length=20)
unique = models.ForeignKey(Unique, on_delete=models.CASCADE, related_name='names')
class Item(models.Model):
item_name = models.CharField(max_length=30)
name = models.ForeignKey(Name, on_delete=models.CASCADE, related_name='items')
has_parents = Parent.objects.filter(
parent__iexact=new_parent.parent,
uniques__unique__iexact=new_unique.unique,
uniques__names__name__iexact=new_name.name,
uniques__names__items__item_name__iexact=new_item.item_name
).exists()
if has_parents:
do_something()
我甚至建议您更改与模型名称相等的字段。
正如你所看到的,它比你的代码更具可读性,就像Python教徒一样,我们真的很讨厌它。