У меня есть модель книги, как показано ниже:
from django.db import models
from django.db.models.signals import pre_save
from django.utils.text import slugify
from django.conf import settings
class Book(models.Model):
added_by = models.ForeignKey(
settings.AUTH_USER_MODEL, null=True, blank=True, related_name='book_add', on_delete=models.CASCADE),
last_edited_by = models.ForeignKey(
settings.AUTH_USER_MODEL, null=True, blank=True, related_name='book_edit', on_delete=models.CASCADE)
title = models.CharField(max_length=120)
description = models.TextField(null=True, blank=True)
slug = models.SlugField()
updated = models.DateTimeField(auto_now_add=False, auto_now=True)
timestamp = models.DateTimeField(auto_now_add=True, auto_now=False)
@property
def user_id(self):
return self.added_by.id
def __str__(self):
return self.title
def pre_save_book(sender, instance, *args, **kwargs):
slug = slugify(instance.title)
instance.slug = slug
pre_save.connect(pre_save_book, sender=Book)
Теперь в моем файле admin.py я пытаюсь сделать это:
from django.contrib import admin
from .models import Book
from .forms import BookForm
class BookAdmin(admin.ModelAdmin):
fields = [
'title',
'slug',
'added_by'
]
read_only_fields = [
'updated'
'timestamp',
'added_by',
'last_edited_by'
]
admin.site.register(Book, BookAdmin)
Я получаю ошибку, которая говоритполе add_by не распознано, но оно должно быть правильным, поскольку я определил его как внешний ключ в исходной модели пользователя.
Итак, я попытался перейти к консоли и попробовать:
(Django-concepts) ~/Desktop/Studies/Codes/Django-concepts/django_cls_views:$ python manage.py shell
Python 3.7.3 (default, Mar 27 2019, 09:23:15)
[Clang 10.0.1 (clang-1001.0.46.3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> from demo.models import Book
>>> for obj in Book.objects.all():
... print(obj.added_by[0].username)
...
Traceback (most recent call last):
File "<console>", line 2, in <module>
AttributeError: 'ForeignKey' object has no attribute 'username'
>>>
Понятия не имею, что я делаю не так. Может кто-нибудь, пожалуйста, посоветуйте это. Как я могу получить доступ к данным пользователя, чтобы я мог распечатать их в представлении.