在不创建外键的情况下加入表或添加破坏外键关系的对象?

时间:2015-04-17 11:48:44

标签: python django postgresql

我正在构建一个项目,其中有两个SQL表:wikispy_editwikispy_rdnswikispy_edit包含 - 除其他外 - 带有索引的ip列,与ip中的wikispy.rdns列的数据类型相同,这是主键。问题是我无法将这两个与django.db.models.ForeignKey连接起来,因为wikispy_edit ip值中的某些值在wikispy_rdns中没有相应的值。虽然Django似乎在./manage.py migrate期间没有抱怨,但是它不允许我使用它的ORM插入这样的对象,这很烦人。

有没有办法模仿这种关系并仍能达到Edit.objects.select_related().filter(rdns__rdns__somequery="blah")的效果?我需要一个类似的语法,因为这是我发现的唯一允许我在单个SQL语句中执行此查询的方法,这有时会拉动数千个对象。如果可能的话,我宁愿避免原始的SQL查询。

这是我到目前为止使用的内容:

class Edit(models.Model):                                                          
    wikipedia_id = models.IntegerField()                                           
    title = models.CharField(max_length=1024)                                      
    wiki = models.ForeignKey('Wiki')                                               
    rdns = models.ForeignKey('RDNS', db_column='ip')                              


class RDNS(models.Model):                                                          
    ip = models.GenericIPAddressField(primary_key=True)                            
    rdns = models.CharField(max_length=253)                                        

这很好用,但问题是这样我就无法插入Edit中未提及IP的新wikispy_rdns。我怎么能解决版本或查询问题?

1 个答案:

答案 0 :(得分:1)

尝试将blank=True, null=True添加到Edit.rdns

的声明中