Django自动将值分配给\u save in admin上的模型字段
我又有点迷路了。我是这方面的初学者。 我有两种型号:Django自动将值分配给\u save in admin上的模型字段,django,django-models,django-admin,Django,Django Models,Django Admin,我又有点迷路了。我是这方面的初学者。 我有两种型号: 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
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)
city = models.CharField(max_lenght=200, default="City")
...
在我的admin.py中,我内联编辑它们,这样在一个表单上我就可以拥有所有的个人数据和他的几个地址。这很重要。我确实需要有一个人与1-3个地址的关系
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)
现在。。。问题是无法创建包含两个模型中的字段的列表显示。据我所知,列表显示是平面的,并且没有地方可以在上面放置同一字段的3个值。我想要一个如下所示的列表:
list_display = ('name', 'phone', 'city')
所以。。。我的想法是在ModelPerson中创建一个名为“maincity”的额外字段,该字段不可由用户编辑,但将根据Address模型中的值自动填充。在我们保存表单之后。我在以下方面发现了类似的情况:
如何告诉django将address.city分配给Person.maincity*
*你可能会笑,我只是在学习 保存个人和地址模型中的城市值将导致数据重复。在设计模型或表时,我们必须避免数据重复 我们可以在AddressAdminlist\u display本身中显示Person和Address模型的值 在AddressAdmin类中定义方法
nick\u name
,参数为self和obj
。通过obj参数,我们可以获得外键字段的值,并将方法名称粘贴到列表显示中
#models.py
class Person(models.Model):
name = models.CharField(max_length=200)
nick_name = models.CharField(max_length=200)
def __str__(self):
return self.name
class Address(models.Model):
name = models.ForeignKey(Person)
city = models.CharField(max_length=200)
def __str__(self):
return self.name
#admin.py
class AddressAdmin(admin.ModelAdmin):
list_display = ('nick_name', 'city')
def nick_name(self, obj):
return obj.name.nick_name
def save_model(self、request、obj、form、change):
这是用于AddressAdmin
还是PersonAdmin
否,这是Django文档中的简单示例。但是我必须将它用于PersonalAdmin
。如果一个人有多个地址,您将在person.maincity中保存哪个地址“city”?还是同一个人的多个地址的城市总是一样的?好问题。。。。不知道:(最后一个?我比我想的更困了。这是你的项目要求决定的。这对AddressAdmin有效。但对PersonalAdmin无效,对吗?我必须尝试一下,但是内联会如何表现呢?我可以用AddressAdmin列表获得相同的表单吗?我猜不是。好吧,有点作弊,我可以让它工作“我的方式”:)谢谢。
#models.py
class Person(models.Model):
name = models.CharField(max_length=200)
nick_name = models.CharField(max_length=200)
def __str__(self):
return self.name
class Address(models.Model):
name = models.ForeignKey(Person)
city = models.CharField(max_length=200)
def __str__(self):
return self.name
#admin.py
class AddressAdmin(admin.ModelAdmin):
list_display = ('nick_name', 'city')
def nick_name(self, obj):
return obj.name.nick_name