Django models 为一对多关系提供更好的Django UI
首先Django models 为一对多关系提供更好的Django UI,django-models,django-admin,Django Models,Django Admin,首先 我喜欢Django,我喜欢它,因为只需几行描述模型,我就得到了完整的CURD web应用程序。 现在我有一个应用程序,需要一对多的关系,它不是工作,因为我期待 我的问题基于: 这是我的代码: 型号.py from django.db import models class Dude(models.Model): name = models.CharField(blank=False, null=False, max_length=100, unique=True) de
我喜欢Django,我喜欢它,因为只需几行描述模型,我就得到了完整的CURD web应用程序。
现在我有一个应用程序,需要一对多的关系,它不是工作,因为我期待 我的问题基于: 这是我的代码: 型号.py
from django.db import models
class Dude(models.Model):
name = models.CharField(blank=False, null=False, max_length=100, unique=True)
def __unicode__(self):
return u"%s" % self.name
class PhoneNumber(models.Model):
dude = models.ForeignKey(Dude)
number = models.CharField(blank=False, null=False, max_length=100, unique=True)
from django.contrib import admin
from TestingDjango.apps.one_to_many.models import Dude, PhoneNumber
class DudeAdmin(admin.ModelAdmin):
pass
list_display = ('name',)
class PhoneNumberAdmin(admin.ModelAdmin):
pass
list_display = ('dude', 'number')
admin.site.register(Dude, DudeAdmin)
admin.site.register(PhoneNumber, PhoneNumberAdmin)
admin.py
from django.db import models
class Dude(models.Model):
name = models.CharField(blank=False, null=False, max_length=100, unique=True)
def __unicode__(self):
return u"%s" % self.name
class PhoneNumber(models.Model):
dude = models.ForeignKey(Dude)
number = models.CharField(blank=False, null=False, max_length=100, unique=True)
from django.contrib import admin
from TestingDjango.apps.one_to_many.models import Dude, PhoneNumber
class DudeAdmin(admin.ModelAdmin):
pass
list_display = ('name',)
class PhoneNumberAdmin(admin.ModelAdmin):
pass
list_display = ('dude', 'number')
admin.site.register(Dude, DudeAdmin)
admin.site.register(PhoneNumber, PhoneNumberAdmin)
当我操作管理web UI时,我需要添加Dude,然后我需要转到PhoneNumber,对于同一Dude的每个号码,我需要添加新行(并一次又一次地选择同一Dude)
我所期待的是:
-当我是加数新手时,在同一个页面中,我将有“+”按钮,我可以为一个新手添加多个数字。然后单击保存。当我看这个家伙时,我会看到那个家伙的所有号码,现在我需要去电话号码查看每个家伙的所有号码
怎么做?是否可以只编辑admin.py,或者我需要为此编写自己的视图?
如果我需要为此写我自己的观点,请给出一些指导方针如何做 您可以使用
InlineAdmin
class DudeAdmin(admin.ModelAdmin):
list_display = ('name', 'list_phones')
在你的admin.py中
class PhoneNumberInline(admin.TabularInline):
model = PhoneNumber # related model
extra = 1 # number of new record fields
class DudeAdmin(admin.ModelAdmin):
inlines = [PhoneNumberInline, ]
admin.site.register(Dude, DudeAdmin)
这将在Dude
记录下显示所有相关的PhoneNumber
记录,您可以添加新记录、更新或删除现有记录。这都是在一个单一的页面,因为你想。在这种方法中,您不需要直接向管理员添加PhoneNumber
更新:您可以查看相关的电话号码或记录了多少电话号码。首先,您必须定义一种方法,将电话号码(或电话号码)返回到您的型号
class Dude(models.Model):
name = models.CharField(blank=False, null=False, max_length=100, unique=True)
def list_phones(self):
phone_numbers = self.phonenumber_set.values_list('number', flat=True) # use reverse relation to get a list ofall recorded numbers
phone_count = self.phonenumber_set.count()
return "This user have %s numbers recorded: %s" % (phone_count, ', '.join(phone_numbers))
def __unicode__(self):
return u"%s" % self.name
在您的ModelAdmin
class DudeAdmin(admin.ModelAdmin):
list_display = ('name', 'list_phones')
您可以使用在
模型下定义的方法,就像使用模型字段一样 您可以使用InlineAdmin
class DudeAdmin(admin.ModelAdmin):
list_display = ('name', 'list_phones')
在你的admin.py中
class PhoneNumberInline(admin.TabularInline):
model = PhoneNumber # related model
extra = 1 # number of new record fields
class DudeAdmin(admin.ModelAdmin):
inlines = [PhoneNumberInline, ]
admin.site.register(Dude, DudeAdmin)
这将在Dude
记录下显示所有相关的PhoneNumber
记录,您可以添加新记录、更新或删除现有记录。这都是在一个单一的页面,因为你想。在这种方法中,您不需要直接向管理员添加PhoneNumber
更新:您可以查看相关的电话号码或记录了多少电话号码。首先,您必须定义一种方法,将电话号码(或电话号码)返回到您的型号
class Dude(models.Model):
name = models.CharField(blank=False, null=False, max_length=100, unique=True)
def list_phones(self):
phone_numbers = self.phonenumber_set.values_list('number', flat=True) # use reverse relation to get a list ofall recorded numbers
phone_count = self.phonenumber_set.count()
return "This user have %s numbers recorded: %s" % (phone_count, ', '.join(phone_numbers))
def __unicode__(self):
return u"%s" % self.name
在您的ModelAdmin
class DudeAdmin(admin.ModelAdmin):
list_display = ('name', 'list_phones')
您可以使用在模型下定义的方法,就像使用模型字段一样 为此,您可以使用内联模型
。它们正是您所需要的。您可以为此使用内联模型。它们正是您所需要的。还有一件事,是否可以添加内联线=[PhoneNumberInline],以某种方式列出Dude的显示=('name',),以便我可以看到每个Dude的所有电话。或者至少有多少部手机,或者前N部手机?谢谢,我将继续这个问题。也许你能再帮我一次?谢谢,还有一件事,是否可以添加内联线=[PhoneNumberInline],以某种方式列出Dude的显示=('name',),这样我就可以看到每个Dude的所有电话。或者至少有多少部手机,或者前N部手机?谢谢,我将继续这个问题。也许你能再帮我一次?谢谢