epa*_*alm 3 python django django-models
我想这是设计的,但这是我的场景:如果保存一个没有父母的孩子,我想创建一个新的父母.
class Parent(models.Model):
pass
class Child(models.Model):
parent = models.ForeignKey(Parent, on_delete=models.PROTECT, related_name='children')
def save(self, *args, **kwargs):
if self.parent is None: # error happens here
self.parent = Parent.objects.create()
super().save(*args, **kwargs)
c = Child()
c.save()
# django.db.models.fields.related_descriptors.RelatedObjectDoesNotExist: Child has no parent.
Run Code Online (Sandbox Code Playgroud)
我在执行时得到了上面的RelatedObjectDoesNotExist if self.parent is None.我也试过if not self.parent,在同一行上同样的错误.我真的不想让父字段可以为空.只是读取self.parent的行为,甚至检查它是否为None,足以触发错误.
这是在Django 1.11,这里出现错误:https://github.com/django/django/blob/2b882a4bd954c8a6b1447f8fc0841a3352514c26/django/db/models/fields/related_descriptors.py#L193,所以如果我正在读这个对,只是通过阅读self.parent,我结束了__get__.
如果我不能检查它是否为"我怎么能"给它一个值,如果它是无"?
问题是访问FK本身会导致数据库查找失败.为避免这种情况,请访问基础ID字段:
if self.parent_id is None:
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
158 次 |
| 最近记录: |