2016-10-05 37 views
1

我希望有一個表,包括一個foriegn關鍵領域本身,已經嘗試下面的代碼:使用Django,我如何添加引用同一個表的外鍵列?

from __future__ import unicode_literals 

from django.db import models 

# Create your models here. 

class CollectionModel(models.Model): 
    parent = models.ForeignKey(CollectionModel, on_delete=models.CASCADE) 

這將產生以下錯誤:

$ ./manage.py makemigrations eav 
Traceback (most recent call last): 
File "./manage.py", line 10, in <module> 
    execute_from_command_line(sys.argv) 
File "/usr/lib/python2.7/site-packages/django/core/management/__init__.py", line 353, in execute_from_command_line 
    utility.execute() 
File "/usr/lib/python2.7/site-packages/django/core/management/__init__.py", line 327, in execute 
    django.setup() 
File "/usr/lib/python2.7/site-packages/django/__init__.py", line 18, in setup 
    apps.populate(settings.INSTALLED_APPS) 
File "/usr/lib/python2.7/site-packages/django/apps/registry.py", line 108, in populate 
    app_config.import_models(all_models) 
File "/usr/lib/python2.7/site-packages/django/apps/config.py", line 202, in import_models 
    self.models_module = import_module(models_module_name) 
File "/usr/lib64/python2.7/importlib/__init__.py", line 37, in import_module 
    __import__(name) 
File "/home/username/Documents/devel/python/project/eav/models.py", line 7, in <module> 
    class CollectionModel(models.Model): 
File "/home/username/Documents/devel/python/project/eav/models.py", line 8, in CollectionModel 
    parent = models.ForeignKey(CollectionModel, on_delete=models.CASCADE) 
NameError: name 'CollectionModel' is not defined 

怎樣包括foriegn關鍵與字段相同的表?

回答

2

https://docs.djangoproject.com/en/1.9/ref/models/fields/#django.db.models.ForeignKey

To create a recursive relationship – an object that has a many-to-one relationship with itself – use models.ForeignKey('self', on_delete=models.CASCADE).

上面的代碼應改爲:

from __future__ import unicode_literals 

from django.db import models 

# Create your models here. 

class CollectionModel(models.Model): 
    parent = models.ForeignKey('self', on_delete=models.CASCADE) 
0

你需要下面的行添加到您的模型

parent = models.ForeignKey('self', blank=True, null=True) 

所以,你的模型看起來像,

from __future__ import unicode_literals 

from django.db import models 

# Create your models here. 

class CollectionModel(models.Model): 
    parent = models.ForeignKey('self', blank=True, null=True) 
相關問題