Странное поведение метода сохранения модели Django."(1048," Столбец 'create_at' не может быть пустым ")" в поле, у которого auto_now_add = True - PullRequest
0 голосов
/ 03 июня 2019

Когда я пытаюсь сохранить (отредактировать) форму, основанную на модели, django показывает (1048, «Столбец« create_at »не может быть пустым»), но созданный_at имеет auto_now_add=True.

Воткод:

Вид:

def post(self, request, track_id):
        track_form = forms.AddTrack(request.POST, request.FILES)
        if track_form.is_valid():
            record = track_form.save(commit=False)
            record.id = track_id
            record.author = request.user
            record.save()

            # Let's let template know that new track was created!
            #request.session['track_created'] = True

            return HttpResponseRedirect("/mytrack/15")
        else:
            return HttpResponseRedirect("/nothing/nothing/nothing/")

Модель:

class Track(models.Model):
    title = models.CharField(max_length=40, null=True)
    description = models.CharField(max_length=500, null=True)
    author = models.ForeignKey(User, default=None, on_delete=models.CASCADE)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)
    miniature = models.ImageField(upload_to='images/track', default="defaults/default.png", validators=[validate_miniature_file_extension])
    audio_or_video = models.FileField(upload_to='audio_and_video/', default="file_not_found", validators=[validate_track_file_extension])
    favourite = models.BooleanField(default=False)

    def __str__(self):
        return self.title

URL:

path('track/<int:track_id>', track.as_view(), name='track'),

Форма:

class AddTrack(forms.ModelForm):
    class Meta:
        model = models.Track
        fields = ['title', 'description', 'audio_or_video', 'miniature', 'favourite']
        widgets = {
            'description': Textarea(attrs={'cols': 30, 'rows': 10}),
        }

1 Ответ

1 голос
/ 04 июня 2019

Вы говорите о «редактировании», поэтому попробуйте сначала найти вашу модель и передать ее в форму.

model = Track.objects.get(pk=track_id)
form = forms.AddTrack(request.POST, instance=model)
form.save()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...