2016-12-21 55 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它。我现在要做的就是格式化列表。