我想通过 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'在字段。
我如何做到这一点?
答案 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)