2016-12-21 58 views
-1

試圖獲得一些Django技能。我想有一個領域與一個領域相乘。所以我可以有更多的人連接到我的主類,並且可以選擇是否激活(爲了將來的需要)。
所以我的子類會是這個樣子:學習Django - models.py ForeignKey或ManyToManyField或其他?

class Subclass(models.Model): 

    STATUS=(
    ('A', Active), 
    ('U', Unactive) 
) 
    status = modelsCharField(max_length=1, choices=STATUS) 
    name = models.CharField(some options) 

在主類,我想將其稱之爲作爲參考,但如果我去:

field=models.ManyToManyField(Subclass) 

它表示爲第二臺對於每個實體,我必須從它的所有實體中選擇。因此,如果我在子類中有2k實體,我必須滾動它們才能找到我的連接(例如,默認管理頁面)

我不想那樣。我需要的僅僅是連接並顯示在管理中的2k個實體中的2個。稍後,那些狀態爲Active的人將顯示在頁面上。

所以我想我會嘗試一個ForeignKey關係:

field=models.ForeignKey(Subclass, on_delegate=models.CASCADE) 

這個遷移過程中,雖然給了我大約missing default values錯誤。 任何幫助將受到歡迎,因爲我現在有點卡住了。

+0

你究竟在努力完成什麼?你的代碼也有很多錯別字和格式問題。你的主類(主模型)是否需要指向你的子類(子模型)的多個記錄? – nmusleh

+0

這只是例子,錯別字是我的事。不得不一直與他們鬥爭:(我的任務是編碼類似...的地址簿?所以你有一個人,他的地址,也是他的老地址,所以主類ia人,子類是一個地址列表。但是我只需要那些相關的東西, –

+1

如果像個人和地址這樣的東西,Address會有一個ForeignKey(Person),並且這會讓你知道你在做什麼。使用InlineModalAdmin。你可能不想使用很多在很多情況下,因爲每個地址都屬於一個人(可能)。比薩餅和澆頭是很多人的例子(許多不同的比薩類型的澆頭)https://docs.djangoproject.com/en/1.10/ref/ contrib/admin /#inlinemodeladmin-objects文件,以便在管理員中處理。 – AMG

回答

0

非常感謝#AMG。我按你的要求做了,現在它可以工作。 在我的models.py

class Person(models.Model): 
name = models.CharField(max_length=200, default="Name") 
phone = models.CharField(max_length=12, default="+22123456789") 
... 
class Adress(models.Model): 
... 
person = models.ForeignKey(Person, on_delete=models.CASCADE) 
... 

我的admin.py

from django.contrib import admin 
from .models import Adress 
from .models import Person 

class AdressInline(admin.TabularInline): 
model = Adress 

class PersonAdmin(admin.ModelAdmin): 
inlines = [ 
AdressInline  
] 

admin.site.register(Person, PersonAdmin) 

這讓我添加一個Person對象,並在同一位置添加一個ADRESS它。我現在要做的就是格式化列表。