Ошибка ограничения FOREIGN KEY в Django sqlite3 - PullRequest
0 голосов
/ 15 апреля 2019

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

Это models.py:

class wall_status(models.Model):
    status = models.OneToOneField(
        CustomUser,
        on_delete=models.CASCADE,
        primary_key=True,
    )
    user = models.ForeignKey(
        settings.AUTH_USER_MODEL,
        related_name="custom_student_status",
        default=1, 
        on_delete=models.CASCADE)
    new_status = models.CharField(max_length=2000, default='')

Это forms.py:

class statusForm(forms.ModelForm):
    new_status = forms.CharField( widget=forms.Textarea)
    class Meta:
        model = wall_status
        fields = ('new_status', )

Это мой views.py:

def add_status(request):
    if request.method == "POST":
        form = statusForm(request.POST)
        if form.is_valid():
            post = form.save(commit=False)
            post.user = request.user
            post.save()
            return redirect('wall')
    else:
        form = statusForm()
    btn = 'Add'
    title = 'Interests'
    return render(request, 'user/profile_info_update.html', {'form': form, 'btn': btn, 
                                                                'title': title})

Это шаблон:

{% block content %}
          <h2>Sign up</h2>
         <form method="post" enctype="multipart/form-data">
              {% csrf_token %}
              {{ form.as_p }}
              <button type="submit">{{ btn }}</button>
            </form>
        {% endblock %}

Теперь еще более запутанно то, что мне удалось 5 раз успешно добавить записи в базу данных, после чего она начала выдавать ошибку. Если я вручную удаляю запись, а затем снова добавляю из runserver, это работает, но как только количество записей в таблице равно 5, я получаю сообщение об ошибке. Есть идеи?

Спасибо

Ответы [ 2 ]

0 голосов
/ 16 апреля 2019

Хорошо, так что я до сих пор не понимаю, если кто-то, пожалуйста, объясните. Итак, вот что исправило мою проблему: Я удалил это из models.py:

status = models.OneToOneField(
        CustomUser,
        on_delete=models.CASCADE,
        primary_key=True,
    )

затем, когда я запустил makemigrations, он попросил меня присвоить значение по умолчанию для id (автоматически созданный первичный ключ, я думаю). И тогда все работало нормально. Если кто-то понимает, что здесь произошло, пожалуйста, объясните мне. Спасибо

0 голосов
/ 15 апреля 2019

Вам не хватает поля status при сохранении формы, которая требуется для вашей модели

Попробуйте это:

status = models.OneToOneField(
        CustomUser,
        on_delete=models.CASCADE,
        primary_key=True,
        blank=True, null=True
    )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...