Django:获取相关对象的详细信息

时间:2014-10-14 10:32:26

标签: django django-forms

我想通过 ForeignKey 列出对象的详细信息和相关对象的详细信息。我可以在Django shell中完成此操作,但无法理解如何将其转换为 models.py admin.py

l1 = Logins.objects.get(id=1)
l1.Benutzer.Vorname

基本细节如下:
models.py

class Portalbenutzer(models.Model):
    Vorname = models.CharField(max_length=20)
    Nachname = models.CharField(max_length=20)
    def __str__(self):
        return self.Nachname

class Logins(models.Model):
    Benutzer = models.ForeignKey(Portalbenutzer)
    Datum = models.DateTimeField('Login-Zeitpunkt')
    URL = models.URLField('URL-Login')
    LoggedOut = models.DateTimeField('Logout-Zeitpunkt')
    def __str__(self):
        return str(self.id)

admin.py

class LoginsAdmin(admin.ModelAdmin):
    fields = ['Datum','LoggedOut','Benutzer','URL']

    admin.site.register(Logins, LoginsAdmin)

更具体:如何列出 Vorname 的值?

是( models.py )如下吗?

VName = self.Benutzer.Vorname

要在登录的管理区域中列出,我可以添加' Vname'在字段
我如何做到这一点?

2 个答案:

答案 0 :(得分:1)

如果我完成了你想要做的事情,看起来这个页面可能会有所帮助: https://docs.djangoproject.com/en/1.7/ref/contrib/admin/#using-generic-relations-as-an-inline

你实际上并没有添加“Vname'在字段中,但您必须通过这种方式从 GenericTabularInline (或相关类,请参阅文档)中创建另一个类:

class PortalbenutzerInline(GenericTabularInline):
    model = Portalbenutzer

然后,以这种方式修改您的admin.py:

class LoginsAdmin(admin.ModelAdmin):
    fields = ['Datum','LoggedOut','Benutzer','URL']
    inline = [PortalbenutzerInline,]

admin.site.register(Logins, LoginsAdmin)

这可以让您在呈现登录时访问 Portalbenutzer 中定义的字段。 Django文档将为您提供一些建议,以便对其进行调整,并仅添加 Vorname 字段(https://docs.djangoproject.com/en/1.7/ref/contrib/contenttypes/#generic-relations-in-admin)。

答案 1 :(得分:1)

你需要将Benutzer放在__str__重载的某个地方登录,并将Vorname添加到Benutzer的重载中。

class Portalbenutzer(models.Model):
    Vorname = models.CharField(max_length=20)
    Nachname = models.CharField(max_length=20)
    def __str__(self):
        return "{} {}".format(self.Vorname, self.Nachname)

class Logins(models.Model):
    Benutzer = models.ForeignKey(Portalbenutzer)
    Datum = models.DateTimeField('Login-Zeitpunkt')
    URL = models.URLField('URL-Login')
    LoggedOut = models.DateTimeField('Logout-Zeitpunkt')
    def __str__(self):
        return "{} ({})".format(self.id, self.Benuzter)

如果您特别希望Benutzer只显示姓氏,但是从登录视图中查看名字,您可以在__str__重载中访问相关Benutzer的属性,就像在shell中一样

class Portalbenutzer(models.Model):
    Vorname = models.CharField(max_length=20)
    Nachname = models.CharField(max_length=20)
    def __str__(self):
        return self.Nachname

class Logins(models.Model):
    Benutzer = models.ForeignKey(Portalbenutzer)
    Datum = models.DateTimeField('Login-Zeitpunkt')
    URL = models.URLField('URL-Login')
    LoggedOut = models.DateTimeField('Logout-Zeitpunkt')
    def __str__(self):
        return "{} ({})".format(self.id, self.Benuzter)