Django: ограничение NOT NULL не выполнено: crf_heu.date_id - PullRequest
0 голосов
/ 27 января 2020

У меня очень простые модели, но я не могу устранить ошибку, связанную с ограничением

У меня есть 2 модели: Jours и Heures, связанные с отношением OneToMany (один экземпляр Jours может иметь несколько экземпляров Heures)

У меня есть форма для добавления записей в Heures, но есть ошибка, которую я не понял:

Сбой ограничения NOT NULL: crf_heu.date_id

models.py

class Jours(models.Model):

    _safedelete_policy = SOFT_DELETE_CASCADE
    jou_ide = models.AutoField(primary_key=True)
    jou_dat = models.DateField("Date du pointage", null=True, blank=True)
    log = HistoricalRecords()

    class Meta:

        db_table = 'crf_jou'
        verbose_name_plural = 'Dates'
        ordering = ['jou_ide']

    def __str__(self):

        return f"{self.jou_dat}"

class Heures(models.Model):

    _safedelete_policy = SOFT_DELETE_CASCADE
    heu_ide = models.AutoField(primary_key=True)
    date = models.ForeignKey(Jours, on_delete = models.CASCADE)
    heu_dat = models.TimeField("Heure du pointage", null=True, blank=True,auto_now_add=True)
    heu_cod = models.IntegerField("Code employé", null=True, blank=True)    
    heu_com = models.CharField("Commentaires", max_length = 150, null=True, blank=True)
    log = HistoricalRecords()

    class Meta:

        db_table = 'crf_heu'
        verbose_name_plural = 'Heures'
        ordering = ['heu_ide']

    def __str__(self):

        return f"{self.heu_dat}"

views.py

@login_required
def index(request):

    if request.method == "POST":
        form = HeuresForm(request, data=request.POST or None)
        if form.is_valid():
            heu_cod = form.cleaned_data['heu_cod'],
            heu_com = form.cleaned_data['heu_com'],
            date_id = Jours.objects.get(jou_dat = datetime.date.today()).jou_dat
            form.save()

            return redirect('home')

    else:
        form = HeuresForm(request)

    return render(request, 'pointage/index.html', {'form': form})

forms.py

Ответы [ 2 ]

0 голосов
/ 27 января 2020

Возможно, вы захотите изменить "jou_ide" на id, который будет AutoField на Jours. После этого может потребоваться, чтобы столбец «null = True» датировал модель Heures.

0 голосов
/ 27 января 2020

Поскольку вы не позволили You didn't specified here date = models.ForeignKey(Jours, on_delete = models.CASCADE) быть нулевым, вам необходимо или разрешить это, или добавить это поле в форму:

class HeuresForm(forms.ModelForm):

    def __init__(self, request, *args, **kwargs):
        self.request = request
        super(HeuresForm, self).__init__(*args, **kwargs)

    gender = forms.ModelChoiceField(queryset=Heures.objects.all(),
                                    to_field_name = 'date',
                                    empty_label="Select heures")
    class Meta:
        model = Heures
        fields = ('heu_cod', 'heu_com', 'gender)

    heu_dat= forms.CharField(label ='Heure du pointage', widget=forms.TimeInput(),initial = datetime.datetime.now,)
    heu_cod = forms.CharField(label ='Code employé', widget=forms.PasswordInput())
    heu_com = forms.CharField(label ='Commentaires', widget=forms.TextInput())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...