我有具有循环关系的模型,我也想在它们上面有null=False。下面是示例。 所有这些都很好,但是在这种情况下如何创建对象?
class Data(models.Model):
master = models.ForeignKey('Master', related_name='data', null=False)
class Master(model.Model):
last = models.OneToOneField('Data', null=False, related_name='+')
向Data
添加一个字段,用于跟踪上次更新时间(或上次添加的时间(。然后使用此字段查询"last">
class Data(models.Model):
master = models.ForeignKey('Master', related_name='data')
added = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
现在您可以像这样查询"最后"的数据位
最新((
master_obj.data.latest('added')
master_obj.data.latest('updated')
你不需要使用"循环">关系。您可以使用reverse ForeignKey
关系来访问模型。您还必须更改模型:
class Data(models.Model):
master = models.ForeignKey('Master', related_name='datas', null=False)
anotherfield = <some_field>
class Master(model.Model):
last = models.CharField(max_length=50, blank=False, null=False)
filtering_masters = Master.objects.filter(datas__anotherfield = "some_value").select_related('data')
如果您需要从Data
获取最后一行,您可以使用:
last = Master.objects.select_related('data').filter(last = "some_master_name").order_by('-datas__id')[0]
注意:这里有__
(双下划线(-datas__id
。