Django - Только пользователь Admin может создавать данные. Ограничение FOREIGN KEY не работает для обычных пользователей

Я создаю простое CRUD-приложение, чтобы подтянуть свои навыки работы с Django (это было давно!), но я получаю следующие ошибки, когда неадмин создает что-либо, либо через фронтенд, либо через бэкенд сайта:

FOREIGN KEY constraint failed

Я также получаю эту ошибку, когда вхожу в систему как пользователь admin и пытаюсь обновить поле пользователя в панели Django Admin.

Сама функциональность работает, поскольку я могу создавать действия через frontend и backend, когда я вхожу в систему как суперпользователь. Я также пробовал удалять миграции и т.д., но, похоже, нет никаких решений.

Сам сайт использует модели allauth от Django, но с пользовательскими моделями, чтобы соответствовать общей цели, но я все еще использую модель пользователя AllAuth в качестве внешнего ключа, так как другая модель является UserProfile:

Ниже приведен мой файл models.py для деятельности:

class Activity(models.Model):
    class Meta:
        verbose_name_plural = 'Activities'

    activity_id = models.AutoField(primary_key=True)
    host = models.ForeignKey(User, on_delete=models.CASCADE, related_name="activity")
    name = models.CharField(max_length=254, null=False, blank=False)
    date = models.DateField()
    start_time =models.TimeField()
    end_time = models.TimeField()
    location = models.CharField(max_length=40, null=False, blank=False)
    description = models.CharField(max_length=140, null=False, blank=False)
    available = models.BooleanField(default=True)

    def __str__(self):
        return str(self.activity_id)

Вид:

def create_activity(request):
    if request.method == "POST":
        form = ActivityForm(data=request.POST)
        if form.is_valid():
            form.instance.host = request.user
            activity = form.save(commit=False)
            activity.save()
            return redirect('activities')
    else:
        form = ActivityForm()
        context = {
        'form': form,
    }
        return render(request, 'activities/new_listing.html', context)

У кого-нибудь есть идеи, почему это происходит?

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

    if form.is_valid():
        #activity = form.save(commit=False)
        #you would also need: activity.host = request.user
        #activity.save()
        form.instance.host = request.user
        form.save()

Здесь я выбрал метод form.instance (из-за https://www.django-antipatterns.com/antipattern/using-commit-false-when-altering-the-instance-in-a-modelform.html), который должен заставить все работать.

Вернуться на верх