Django-允许同时上传图像和文本吗?
Django- allow both images and text to be uploaded at the same time?
我想在我的 models.py
和 forms.py
中有一个字段,以便可以选择上传照片或文本,或同时上传两者。目前,我使用所见即所得的编辑器来做到这一点。我将如何修改我的模型以便我可以拥有该选项?到目前为止,这是我的代码:
models.py
class Problem(models.Model):
slug = models.SlugField(null = False, unique = True, max_length = 255)
topic = models.ForeignKey(Topic, on_delete = models.CASCADE)
free = models.CharField(max_length = 1, choices = Free)
#problem when introducing UUID field
traceID = models.UUIDField(default=uuid.uuid4, editable = True)
#use meta tags to optimize SEO
metaTags = models.TextField(default = "")
questionToProblem = models.TextField()
#migration with CKEDitor is 0023_alter_problem_solutiontoproblem.py
solutionToProblem = RichTextUploadingField(blank = True, null = True)
字段 solutiontoProblem
是我的文本编辑器所在的位置 - 我想要该字段以便它接受文本和图像。同样,这是我的 forms.py
:
forms.py
class ProblemForm(forms.ModelForm):
slug = forms.CharField(widget=forms.TextInput(attrs={'placeholder': 'link'}))
topic = forms.ModelChoiceField(label = "Topic", queryset = Topic.objects.all())
metaTags = forms.CharField(label = "Meta Tags", widget=forms.Textarea(attrs={"rows" : 15, "cols" : 90}))
questionToProblem = forms.CharField(label = "Question", widget = QuestionFormWithPreview(attrs={'id' : 'mathInputForQuestion', 'cols': 90, 'rows': 15, 'onkeyup':'PreviewQuestion.Update()'}))
solutionToProblem = forms.CharField(widget = CKEditorUploadingWidget(), label = "Solution")
class Meta:
model = Problem
fields = ('metaTags', 'questionToProblem', 'solutionToProblem')
我如何获得它,以便模型和表单中的字段都可以接受图像文件或文本,或两者?
您可以将这两个字段放在其他模型中并从您的模型中指向它:
class Solution(models.Model):
description = models.TextField(null=True, blank=True)
image = models.ImageField(null=True, blank=True)
def clean(self):
if self.decription is None and self.image is None:
raise ValidationError('Please provide image of text')
super().clean()
class Problem(forms.Model):
...
solutionToProblem = models.ForeignKey(Solution, on_delete=models.CASCADE)
然后您为 Solution
创建一个表单。可能就这么简单:
class SolutionForm(forms.ModelForm):
class Meta:
model = Solution
fields = ('description', 'image')
因此,从问题模型的角度来看,这在技术上将是 一个字段,但具有两个属性。以及如何 represent/handle 你可以在你的前端决定(例如,当没有文本时只显示图像等)
我想在我的 models.py
和 forms.py
中有一个字段,以便可以选择上传照片或文本,或同时上传两者。目前,我使用所见即所得的编辑器来做到这一点。我将如何修改我的模型以便我可以拥有该选项?到目前为止,这是我的代码:
models.py
class Problem(models.Model):
slug = models.SlugField(null = False, unique = True, max_length = 255)
topic = models.ForeignKey(Topic, on_delete = models.CASCADE)
free = models.CharField(max_length = 1, choices = Free)
#problem when introducing UUID field
traceID = models.UUIDField(default=uuid.uuid4, editable = True)
#use meta tags to optimize SEO
metaTags = models.TextField(default = "")
questionToProblem = models.TextField()
#migration with CKEDitor is 0023_alter_problem_solutiontoproblem.py
solutionToProblem = RichTextUploadingField(blank = True, null = True)
字段 solutiontoProblem
是我的文本编辑器所在的位置 - 我想要该字段以便它接受文本和图像。同样,这是我的 forms.py
:
forms.py
class ProblemForm(forms.ModelForm):
slug = forms.CharField(widget=forms.TextInput(attrs={'placeholder': 'link'}))
topic = forms.ModelChoiceField(label = "Topic", queryset = Topic.objects.all())
metaTags = forms.CharField(label = "Meta Tags", widget=forms.Textarea(attrs={"rows" : 15, "cols" : 90}))
questionToProblem = forms.CharField(label = "Question", widget = QuestionFormWithPreview(attrs={'id' : 'mathInputForQuestion', 'cols': 90, 'rows': 15, 'onkeyup':'PreviewQuestion.Update()'}))
solutionToProblem = forms.CharField(widget = CKEditorUploadingWidget(), label = "Solution")
class Meta:
model = Problem
fields = ('metaTags', 'questionToProblem', 'solutionToProblem')
我如何获得它,以便模型和表单中的字段都可以接受图像文件或文本,或两者?
您可以将这两个字段放在其他模型中并从您的模型中指向它:
class Solution(models.Model):
description = models.TextField(null=True, blank=True)
image = models.ImageField(null=True, blank=True)
def clean(self):
if self.decription is None and self.image is None:
raise ValidationError('Please provide image of text')
super().clean()
class Problem(forms.Model):
...
solutionToProblem = models.ForeignKey(Solution, on_delete=models.CASCADE)
然后您为 Solution
创建一个表单。可能就这么简单:
class SolutionForm(forms.ModelForm):
class Meta:
model = Solution
fields = ('description', 'image')
因此,从问题模型的角度来看,这在技术上将是 一个字段,但具有两个属性。以及如何 represent/handle 你可以在你的前端决定(例如,当没有文本时只显示图像等)