如下所示的House模型,其”province“, "city"和"district"字段类型是指向Region模型的外键。
class Region(models.Model): """行政区域表 国家,省,市,区(县) """ parent = models.ForeignKey('self') name = models.CharField(max_length=30) region_type = models.IntegerField() class Meta: db_table = "regions" class House(models.Model): """房屋表 """ province = models.ForeignKey(Region) city = models.ForeignKey(Region) district = models.ForeignKey(Region) address = models.CharField(max_length=200) name = models.CharField(max_length=200) longitude = models.FloatField() # 经度 latitude = models.FloatField() # 纬度 created_at = models.DateTimeField(auto_now_add=True) updated_at = models.DateTimeField(auto_now=True, null=True)
表面上看起来好像没有问题,但是进行syncdb时,就会出现”house.house: Accessor for field 'province' clashes with related field 'Region.house_set'. Add a related_name argument to the definition for 'province'....“错误。
原因是指向同一模型的三个外键反向关联名称产生了冲突,Region模型对province的反向关联名称为house_set(),对city的反向关联名称也是house_set(),对district的反向关联名称还是house_set()。
解决方法:给models.ForeignKey()加入related_name参数,定义不同的关联名称。如下代码:
class House(models.Model): """房屋表 """ province = models.ForeignKey(Region, related_name='province_houses') city = models.ForeignKey(Region, related_name='city_houses') district = models.ForeignKey(Region, related_name='district_houses') address = models.CharField(max_length=200) name = models.CharField(max_length=200) longitude = models.FloatField() # 经度 latitude = models.FloatField() # 纬度 created_at = models.DateTimeField(auto_now_add=True) updated_at = models.DateTimeField(auto_now=True, null=True)
呵呵,谢谢
VaTG790i.最好的<a href=http://www.kyfei.com>网站推广软件</a>,
非常好
....................
;ui;普i;uighur;ui;ui;个
在unix网络编程中看到了关于TCP/IP的一些内容,我感觉还是写的不够。正在下载中,一定
下载地址呢