gpt4 book ai didi

python - Django中Manytomany字段自定义显示对象

转载 作者:行者123 更新时间:2023-12-01 23:15:56 24 4
gpt4 key购买 nike

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

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

from django.contrib.auth.models import AbstractUser

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

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

from registration import User

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

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

最佳答案

您可以使用 Django 表单域。 Django 为不同类型的字段放置了这些表单字段。要在多对多关系中使用表单域,您可以使用 formfield_for_manytomany在模型 admin_class 中。

试试把这个函数放在Photo模型所在应用的admin.py文件中的Photo模型admin类中,如果没有类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)

关于python - Django中Manytomany字段自定义显示对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68888114/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com