如何解决在 Django 中使用图像填充表单中的字段
我正在尝试使用来自 Django 模型的图像填充字段。这个想法是,用户将输入他们的产品名称,然后最终一个带有谷歌图片的 API 会查找并填充下一页上的一个字段,其中包含几个可供选择的图片。
在这个阶段,我只是想在表单上设置一个字段来显示多张图片供用户选择,但我遇到了困难。这是我的一些代码,任何输入都有帮助。我知道围绕这个主题有很多东西,我已经浏览了很多,但我仍然被困住了。我最近的尝试是创建一个自定义 Widget,我非常愿意接受任何可行的解决方案。
我真的不是 Django/Python 向导,所以请耐心等待 :) 谢谢!
模型.py
frame size: 1013760
buffer can read: 0
forms.py
class Productimage(models.Model):
imageId = models.AutoField(auto_created=True,primary_key=True)
image = models.ImageField(upload_to='images',null=True,blank=True)
def __str__(self):
return str(self.image)
class Item(models.Model):
itemId = models.AutoField(auto_created=True,primary_key=True)
itemName = models.CharField(
"Name",max_length=1024,)
category = models.ForeignKey(Category,on_delete=models.CASCADE,related_name='category'
)
itemImage = models.ForeignKey(Productimage,related_name='photo',default="",)
itemOwner = models.ForeignKey(Customer,related_name='my_items'
)
itemAvaialable = models.BooleanField()
costPerItem = models.IntegerField(verbose_name='Cost per Item (USD)')
itemDescription = models.TextField(null=True,blank=True)
itemAddedDate = models.DateField(auto_Now_add=True)
asin = models.CharField(null=True,blank=True,max_length=10)
视图.py
class ImageCreationForm(forms.ModelForm):
class Meta:
model = Productimage
fields = ('image',)
def clean_itemImage(self):
itemImage = self.cleaned_data['itemImage']
valid_extensions = ['jpg','jpeg']
extension = itemImage.rsplit('.',1)[1].lower()
if extension not in valid_extensions:
raise forms.ValidationError('The given product Image file does not ' \
'match valid image extensions.')
return itemImage
class ItemCreationForm(forms.ModelForm):
class Meta:
model = Item
fields = '__all__'
widgets = {
'itemAddedDate': forms.HiddenInput,}
小部件.py
class AddImageView(LoginrequiredMixin,CreateView):
model = Productimage
template_name = 'addImage.html'
fields = ('image',)
def form_valid(self,form):
form.is_valid()
form.instance.itemOwner = self.request.user
return super().form_valid(form)
def get_success_url(self):
return reverse('RentalApp:my_products')
class AddProductView(LoginrequiredMixin,CreateView):
model = Item
template_name = 'addProduct.html'
image = forms.FileField(required=False)
fields = ('itemName','category','itemImage','itemAvaialable','costPerItem','itemDescription')
login_url = '/users/login/'
def form_valid(self,form):
form.fields["itemImage"].queryset = Productimage.objects.all()
form.is_valid()
form.instance.itemOwner = self.request.user
return super().form_valid(form)
def get_success_url(self):
return reverse('RentalApp:my_products')
Serializers.py
class ImageWidget(forms.widgets.Widget):
def render(self,name,value,attrs=None,**kwargs):
html = Template("""<img src="$link"/>""")
return mark_safe(html.substitute(link=value))
用于添加产品的模板:
class ProductimageSerializer(serializers.ModelSerializer):
product_image = serializers.SerializerMethodField()
class Meta:
model = Productimage
fields = ('image')
class ProductimageRequirementSerializer(serializers.ModelSerializer):
class Meta:
model = Productimage
fields = ('image')
class ProductSerializer(serializers.ModelSerializer):
Product_requirement = serializers.SlugrelatedField(many=True,read_only=True,slug_field='text')
club_image = ProductimageSerializer(many=True)
class Meta:
model = Productimage
fields = ('image')
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。