Python 如何从URL django中筛选Catgery设置的blogphoto_?
你好,我创建了一个名为Python 如何从URL django中筛选Catgery设置的blogphoto_?,python,django,django-rest-framework,Python,Django,Django Rest Framework,你好,我创建了一个名为BlogPhoto的模型,它连接到Blog模型,我创建了一个序列化程序,其中包含create和update功能,我还有一个url,其中包含category和id包含,我想按url中的类别过滤BlogPhoto\u集。这是到目前为止我的代码 型号.py CATEGORY = [ ("vehicle-photo", _("Vehicle photo")), ("Vehicle-registration"
BlogPhoto
的模型,它连接到Blog
模型,我创建了一个序列化程序,其中包含create
和update
功能,我还有一个url,其中包含category
和id
包含,我想按url中的类别过滤BlogPhoto\u集
。这是到目前为止我的代码
型号.py
CATEGORY = [
("vehicle-photo", _("Vehicle photo")),
("Vehicle-registration", _("Vehicle registration")),
("insurance-police",_("Insurance police")),
("other",_("Other")),
]
class BlogPhoto(models.Model):
created_by = models.ForeignKey(settings.AUTH_USER_MODEL, models.CASCADE)
blog = models.ForeignKey(Blog, models.CASCADE, verbose_name=_('blog'))
category = models.CharField(max_length=255, choices=CATEGORY, null=True, blank=True)
name = models.CharField(_("Description about image"),max_length=255, null=True, blank=True)
file = models.FileField(
_("Upload documents image"), null=True, blank=True, upload_to=generic_upload_blog, max_length=500
)
class BlogPhotoSerializer(serializers.ModelSerializer):
id = serializers.IntegerField(required=False)
file = Base64ImageField(
max_length=None,
use_url=True,
required=False,
allow_null=True,
allow_empty_file=True
)
class Meta:
model = BlogPhoto
exclude = ['created_by', 'blog']
def create(self, validated_data):
validated_data['created_by'] = self.context['request'].user
return super().create(validated_data)
class PhotoBlogSerializer(serializers.ModelSerializer):
blog_photo = BlogPhotoSerializer(
many=True, source="blogphoto_set", required=False
)
class Meta:
model = Blog
fields = ["blog_photo"]
def create(self, validated_data):
if "blogphoto_set" in validated_data:
cps = validated_data.pop("blogphoto_set")
else:
cps = []
instance = super().create(validated_data)
for cp in cps:
instance.blogphoto_set.create(**cp)
return instance
def update(self, instance, validated_data):
if 'blogphoto_set' in validated_data:
ids_set = [ndata['id']
for ndata in validated_data['blogphoto_set'] if 'id' in ndata]
instance.blogphoto_set.exclude(id__in=ids_set).delete()
for ndata in validated_data['blogphoto_set']:
if ndata.get('id'):
note = instance.blogphoto_set.get(id=ndata['id'])
ndata.pop('id')
else:
note = BlogPhoto(
blog=instance, created_by=self.context['request'].user)
for k, v in ndata.items():
setattr(note, k, v)
note.save()
validated_data.pop('blogphoto_set')
return super().update(instance, validated_data)
url.py在URL中有一个类别,我想在queryset中使用它来获取过滤器blogphot\u集
urlpatterns = [
path("list/<int:pk>/<slug:category>/image/", views.BlogImagelView.as_view()),
]
序列化程序.py
CATEGORY = [
("vehicle-photo", _("Vehicle photo")),
("Vehicle-registration", _("Vehicle registration")),
("insurance-police",_("Insurance police")),
("other",_("Other")),
]
class BlogPhoto(models.Model):
created_by = models.ForeignKey(settings.AUTH_USER_MODEL, models.CASCADE)
blog = models.ForeignKey(Blog, models.CASCADE, verbose_name=_('blog'))
category = models.CharField(max_length=255, choices=CATEGORY, null=True, blank=True)
name = models.CharField(_("Description about image"),max_length=255, null=True, blank=True)
file = models.FileField(
_("Upload documents image"), null=True, blank=True, upload_to=generic_upload_blog, max_length=500
)
class BlogPhotoSerializer(serializers.ModelSerializer):
id = serializers.IntegerField(required=False)
file = Base64ImageField(
max_length=None,
use_url=True,
required=False,
allow_null=True,
allow_empty_file=True
)
class Meta:
model = BlogPhoto
exclude = ['created_by', 'blog']
def create(self, validated_data):
validated_data['created_by'] = self.context['request'].user
return super().create(validated_data)
class PhotoBlogSerializer(serializers.ModelSerializer):
blog_photo = BlogPhotoSerializer(
many=True, source="blogphoto_set", required=False
)
class Meta:
model = Blog
fields = ["blog_photo"]
def create(self, validated_data):
if "blogphoto_set" in validated_data:
cps = validated_data.pop("blogphoto_set")
else:
cps = []
instance = super().create(validated_data)
for cp in cps:
instance.blogphoto_set.create(**cp)
return instance
def update(self, instance, validated_data):
if 'blogphoto_set' in validated_data:
ids_set = [ndata['id']
for ndata in validated_data['blogphoto_set'] if 'id' in ndata]
instance.blogphoto_set.exclude(id__in=ids_set).delete()
for ndata in validated_data['blogphoto_set']:
if ndata.get('id'):
note = instance.blogphoto_set.get(id=ndata['id'])
ndata.pop('id')
else:
note = BlogPhoto(
blog=instance, created_by=self.context['request'].user)
for k, v in ndata.items():
setattr(note, k, v)
note.save()
validated_data.pop('blogphoto_set')
return super().update(instance, validated_data)