如何使用circular和null = False关系创建模型实例?

时间:2018-05-09 16:03:28

标签: django django-models

我有循环关系的模型,我想在它们上面也有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='+')

2 个答案:

答案 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)

现在您可以查询“最后”位数据,如此

latest()

master_obj.data.latest('added')
master_obj.data.latest('updated')