是否可以在 django 中将两个模型合并为一个模型,以便我可以在一张表中显示 django 管理面板中两个表的所有详细信息。
class User(AbstractUser):
first_name = models.CharField(max_length=255)
last_name = models.CharField(max_length=255)
email = models.EmailField(unique=True)
phone = models.CharField(max_length=12)
username = models.CharField(max_length=150, null=True)
company_name = models.CharField(max_length=255, null=True, blank=True)
gst_no = models.CharField(max_length=150, blank=True, null=True)
class Address(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL,
on_delete=models.CASCADE, related_name='address')
street_address = models.CharField(max_length=100)
apartment_address = models.CharField(max_length=100)
country = CountryField(multiple=False)
state = models.CharField(max_length=100,)
city = models.CharField(max_length=100)
zip = models.CharField(max_length=100)
address_type = models.CharField(max_length=1, choices=ADDRESS_CHOICES)
default = models.BooleanField(default=False)
used_in_orders = models.BooleanField(default=False)
display = models.BooleanField(default=True)
def gst_no(self):
return self.user.gst_no if self.user.gst_no else None
我知道有内联方法,但我不知道。我想要将两个模型的所有详细信息显示到一个单独的表中
最佳答案
按照您的期望,您希望在 Django 管理面板上实现此功能。实现此目的的一种方法是使用 select_lated() 在 User 和 Address 模型之间进行连接。
我注册了Address模型并重写get_queryset()方法来编写预期的queryset并编写callable来显示用户模型字段.
@admin.register(Address)
class AddressAdmin(admin.ModelAdmin):
list_display = [
'first_name', 'last_name', 'email', 'phone', 'username', 'company_name',
'street_address', 'apartment_address', 'country', 'state', 'city', 'zip', 'address_type', 'default', 'used_in_orders', 'display'
]
def get_queryset(self, request):
queryset = super().get_queryset(request)
queryset = queryset.select_related("user").all()
return queryset
def first_name(self, obj):
return obj.user.first_name
def last_name(self, obj):
return obj.user.last_name
def email(self, obj):
return obj.user.email
def phone(self, obj):
return obj.user.phone
def username(self, obj):
return obj.user.username
def company_name(self, obj):
return obj.user.company_name
如果要更改页面名称,请更改地址模型的 verbose_name(例如“用户详细信息”)
class Address(models.Model):
...
class Meta:
verbose_name = 'User Detail'
verbose_name_plural = 'User Details'
如果您不想使用地址模型,也可以使用地址的代理模型。
关于python - 在 django 中将两个模型合并为一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75884015/