django有条件的外键

时间:2018-10-16 15:03:12

标签: django model

下面是我的模特。

class DoneType (AbstractTimeStamp):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    name = models.CharField(max_length=200, primary_key=True)

class Done (AbstractTimeStamp):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    contents = models.CharField(max_length=200)
    done_type = models.ForeignKey(DoneType, on_delete=models.SET_NULL, null=True)
    start_time = models.DateTimeField()
  

>   一个用户可以拥有许多DONE模型。 DONE模型可以具有许多DONE_TYPE模型。   
但是,只有在DONE模型中的USER与DONE_TYPE模型中的USER相同时,这才可能。   我该如何实现?

1 个答案:

答案 0 :(得分:-1)

更有意义的是让DoneType.user继承自ForeignKey的{​​{1}},然后可以由Done调用。

那样,您甚至不需要进行任何比较,因此不需要额外的数据库命中((也更快)

)。

但是,如果您想比较这两个字段,您将在视图中执行类似的操作...

假设done_type.user.userdone = Done.objects.get(id=1)

done_type = DoneType.objects.get(id=1)

但是像这样比较是个坏主意。

相关问题