Как сохранить файл в BinaryField с помощью формы Django - PullRequest
0 голосов
/ 17 мая 2019

Я новичок в Джанго. пожалуйста помоги. Я хочу сохранить изображение в BinaryField с помощью формы, но это не работает. вместо загрузки в медиа-папку я хочу сохранить файл непосредственно в базе данных с помощью BinaryField.

Model.py:

class serviceDb(models.Model):
    Dev = 1
    QA = 2
    UAT = 3
    Production = 4
    environment_TYPES = (   (Dev, 'Dev'),   (QA, 'QA'), (UAT, 'UAT'),   (Production, 'Production'), )
    application = models.CharField(db_column='Application', max_length=255, blank=True, null=True)  # Field name made lowercase.
    startdate = models.DateField(null=True)
    expiredate = models.DateField(null=True)
    environment_type = models.PositiveSmallIntegerField(choices=environment_TYPES)
    CSR=models.BinaryField(editable=True)

Form.py:

class serviceForm(forms.ModelForm):
    app_attributes = {'oninvalid': 'this.setCustomValidity("Application field is required")', 'oninput': 'this.setCustomValidity("")'}
    startdate = forms.DateField(widget = forms.SelectDateWidget(years=range(1995, 2100)))
    expiredate = forms.DateField(widget = forms.SelectDateWidget(years=range(1995, 2100)))
    application = forms.CharField(widget=forms.TextInput(attrs=app_attributes))
    CSR = forms.FileField(required=False)
    class Meta:
        model = serviceDb
        fields = ('application', 'startdate', 'expiredate', 'environment_type','CSR' )

        error_messages = {
            'application': {
                'required': ("Application field is required"),
            },
            }

1 Ответ

0 голосов
/ 17 мая 2019

BinaryField ожидает BinaryData, поэтому @Vaibhav Vishal предложил вам преобразовать его самостоятельно.

До сих пор я никогда не использовал BinaryField, и вам действительно стоит подумать о том, чтобы не сохранять двоичные данные в базе данных.

Но в вашем случае я предлагаю попробовать что-то подобное

class ServiceCreateFormView(CreateView):
    template = ...
    form_class = serviceForm  # Should be `ServiceForm` btw.

    def form_valid(self, form):
        uploaded_file = form.files['CSR'].file  # I assume a `InMemoryUploadedFile` instance
        data = uploaded_file.file.read()

        # construct you own instance here using `data`
        self.object = ...

        return HttpResponseRedirect(self.get_success_url())

Пожалуйста, включите больше информации о вашей проблеме.Как трассировка, что именно не работает, что вы пытались решить?

...