我正在开发一个网站,我可以手动添加摄影师到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也会显示在摄影师中。我希望只显示是摄影师的用户,而不是普通用户。
发布于 2021-08-23 06:37:42
您可以使用Django 。Django为不同类型的字段放置了这些表单字段。要在ManyToMany关系中使用model字段,可以在模型admin_class中使用多细胞瘤。
尝试将此函数放入照片模型所在的应用程序的admin.py文件中的Photo模型管理类中,如果您没有类管理,请创建如下所示:
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)发布于 2021-08-23 06:37:13
在您的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)发布于 2021-08-23 06:37:39
您可以使用[Django-doc]
from django.conf import settings
class Photo(models.Model):
# …
photographers = models.ManyToManyField(
setting.AUTH_USER_MODEL,
limit_choices_to={'is_photographer': True}
)注意事项:通常使用[Django-doc]引用用户模型要比直接使用模型[Django-doc]更好。有关更多信息,您可以看到文件一节。
https://stackoverflow.com/questions/68888114
复制相似问题