我有循环关系的模型,我想在它们上面也有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='+')
答案 0 :(得分:0)
您不需要使用"循环" 关系。您使用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
。
答案 1 :(得分:0)
向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')