Seite 1 von 1

Django mehrer Dateien mit einem bestehenden Model verknüpfen

Verfasst: Freitag 27. September 2019, 20:11
von jinroo
Hallo,

ich habe gerade eben schonmal einen Post geschrieben, allerdings sieht es so aus als wenn er nicht gespeichert wurde :shock: Daher nochmal von vorne

Ich versuche zu einem bestehenden Model ein neues Model zu verknüpfen, um mehrere Dateien gleichzeitig hochzuladen.


urls

Code: Alles auswählen

urlpatterns = [
    url(r'^$', views.MemoriesIndexListView.as_view(), name='index'),
    url(r'^add-attachment/(?P<question_id>\d+)/$', views.UploadView.as_view(), name='attachment'),
    ### some more urls ###
]
models

Code: Alles auswählen

class Question(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='remember_user')
    ### some more fields ###

class Attachment(models.Model):
    question = models.ForeignKey(Question, on_delete=models.CASCADE)
    file = models.FileField(upload_to='attachments')
views

Code: Alles auswählen

class UploadView(FormView):
    template_name = 'attachment_form.html'
    form_class = UploadForm

    def form_valid(self, form):
        for each in form.cleaned_data['attachments']:
            Attachment.objects.create(file=each)
        return super(UploadView, self).form_valid(form)

    def get_success_url(self):
        return reverse("index")
forms

Code: Alles auswählen

class UploadForm(forms.Form):
    attachments = MultiFileField(min_num=1, max_num=10, max_file_size=1024*1024*5)
Wenn ich allerdings makemigration starte, dann bekomme ich diese Fehlermeldung. Was ich allerdings nicht verstehe, warum ich einen default beim verknüpfen benötige.
You are trying to change the nullable field 'question' on attachment to non-nullable without a default; we can't do that (the database needs something to populate existing rows).
default=1 macht ja keinen Sinn

Wie müsste ich das richtig verknüpfen?

Re: Django mehrer Dateien mit einem bestehenden Model verknüpfen

Verfasst: Freitag 27. September 2019, 20:54
von sparrow
Verstehst du grundsätzlich, warum das Problem auftritt?
Laut Fehlermeldung hast du ein Feld, nämlich 'question' in der Relation 'attachment' geändert. Vorher war es möglich, dieses mit "NULL" zu belegen, nun hast du ihm die Eigschaft gegeben, dass das nicht mehr geht (NOT NULL in SQL). Damit die Änderung angewandt werden kann, muss nun angegeben werden, was mit den Einträgen passiert, die bereits in der Datenbank existieren und potentiell NULL sind - denn NULL können sie nun nicht mehr bleiben.

Re: Django mehrer Dateien mit einem bestehenden Model verknüpfen

Verfasst: Freitag 27. September 2019, 21:33
von jinroo
Ah ok danke, jetzt verstehe ich die Fehlermeldung

Ich habe nun vorerst so angepasst

Code: Alles auswählen

question = models.ForeignKey(Memories, on_delete=models.CASCADE,  null=True)
Somit benötige ich keinen default mehr.

null=True entferne ich später wieder wenn alles soweit in Ordnung ist.