Django mehrer Dateien mit einem bestehenden Model verknüpfen

Django, Flask, Bottle, WSGI, CGI…
Antworten
jinroo
User
Beiträge: 12
Registriert: Dienstag 13. Oktober 2015, 16:30

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?
Benutzeravatar
sparrow
User
Beiträge: 4193
Registriert: Freitag 17. April 2009, 10:28

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.
jinroo
User
Beiträge: 12
Registriert: Dienstag 13. Oktober 2015, 16:30

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.
Antworten