目前,我在Django中有三个模型可以创建循环引用:
AUser可以存在于ALocation中。
ALocation必须是AProperty的一部分。
AProperty必须有一个所有者,即AUser
我希望每个User指定一个位置的原因是为了住在公寓里的人。公寓租户会住在一个编号的房间,但房客不会。但请注意,该位置也可以只是一个财产(即房客居住的位置只是一个有地址的财产;该财产没有房间编号、楼层或建筑物)。
下面是(精简)代码:

class User( models.Model ) :
    TYPE_CHOICES = (
        ( 't', 'tenant'           ),
        ( 'o', 'property owner'   ),
        ( 'v', 'vendor'           ),
        ( 'm', 'property manager' ),
    )

    user_type  = models.CharField( max_length = 1, choices = TYPE_CHOICES, default = 't' )
    first_name = models.CharField( max_length = 135 )
    last_name  = models.CharField( max_length = 135 )
    location   = models.ForeignKey( Location, null = True, blank = True )

class Property( models.Model ) :
    name             = models.CharField( max_length = 135 )
    owner            = models.ForeignKey( User )
    address_line_one = models.CharField( max_length = 135 )
    address_line_two = models.CharField( max_length = 135, blank = True )
    city             = models.CharField( max_length = 135 )
    state            = models.CharField( max_length = 135 )
    zip_code         = models.CharField( max_length = 135 )

class Location( models.Model ) :
    room       = models.CharField( max_length = 135, blank = True )
    floor      = models.CharField( max_length = 135, blank = True )
    building   = models.CharField( max_length = 135, blank = True )
    prop       = models.ForeignKey( Property )

请让我知道,如果你们需要更多的澄清或代码。提前谢谢!

最佳答案

比如说,您可以使用字符串指定要在关系中使用的应用程序和模型。
如果需要在尚未定义的模型上创建关系,可以使用模型的名称,而不是模型对象本身

10-08 04:10