Django中的许多字段自定义显示对象

2024-09-27 22:21:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在开发一个网站,我可以手动将摄影师添加到Django adminpanel,然后上传他们拍摄的图像

我在Django中使用了默认用户系统,并在此处添加了一个字段,显示该用户是否是摄影师:

from django.contrib.auth.models import AbstractUser

# Create your models here.
class User(AbstractUser):
    is_photographer = models.BooleanField(default=True)

此外,在我需要放置图像的模型中,我为摄影师使用了许多字段(因为这些照片可能是由几个人拍摄的):

from registration import User

class Photo(models.Model):
    ...
    photographers = models.ManyToManyField(User)

问题是,在向管理面板添加新图像时,摄影师中也会显示非摄影师且is_photographer为False的用户。我希望只显示摄影师用户,而不是普通用户


Tags: django用户from图像importis网站models
3条回答

您可以使用Django formfield。Django为不同类型的字段放置了这些formfields。要在许多关系中使用formfields,可以在model admin_类中使用formfield_for_manytomany

尝试将此函数放在照片模型所在应用程序的admin.py文件中的照片模型管理类中,如果没有类admin,请创建如下所示的类:

from .models import Photo
from django.contrib import admin
from registration.models import User


class PhotoAdmin(admin.ModelAdmin):
    def formfield_for_manytomany(self, db_field, request, **kwargs):
        kwargs["queryset"] = User.objects.filter(is_photographer=True)
        return super(PhotoAdmin, self).formfield_for_manytomany(db_field, request, **kwargs)

admin.site.register(Photo, PhotoAdmin)

admin.py文件中执行以下操作:

class PhotoAdmin(admin.ModelAdmin):
    def formfield_for_manytomany(self, db_field, request, **kwargs):
        kwargs['queryset'] = Users.objects.filter(is_photographer=True)
        return super().formfield_for_manytomany(db_field, request, **kwargs)

admin.site.register(Photo, PhotoAdmin)

您可以使用^{} [Django-doc]

from django.conf import settings

class Photo(models.Model):
    # …
    photographers = models.ManyToManyField(
        setting.AUTH_USER_MODEL,
        limit_choices_to={'is_photographer': True}
    )

Note: It is normally better to make use of the settings.AUTH_USER_MODEL [Django-doc] to refer to the user model, than to use the User model [Django-doc] directly. For more information you can see the referencing the User model section of the documentation.

相关问题 更多 >

    热门问题