当我在Django中使用原始用户模型作为外键时如何访问用户详细信息

我的图书模型如下:

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,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'
>>> 

我绝对不知道我在做什么错。有人可以对此提供建议。如何访问用户详细信息,以便可以在视图中打印它们。

taodaidai 回答:当我在Django中使用原始用户模型作为外键时如何访问用户详细信息

您的模型定义中有错字; module.exports = (_,{ mode } = {}) => { const p = mode === 'production'; const config = { module: { rules: [ { test: /\.s?css$/,use: [ p ? MiniCssExtractPlugin.loader : 'style-loader',],} ],} }; }; 字段之后的额外,。那把定义变成了元组。您的迁移实际上不会在那里添加一列。删除逗号并运行makemigrations并再次迁移。

,
print(obj.added_by.username)

这应该有效。

本文链接:https://www.f2er.com/3167435.html

大家都在问