Когда я пытаюсь выполнить object.save(), я получаю ошибку "missing 1 required keyword-only argument: 'manager'" в django

Когда я пытаюсь сохранить что-то в представлениях, возникает ошибка,

"    post_obj.save()
TypeError: __call__() missing 1 required keyword-only argument: 'manager'
"

models.py

class Post(models.Model):
  title = models.CharField(max_length=150)
  owner = models.ForeignKey(Customer, on_delete=models.CASCADE)

views.py

@api_view(["POST"])
def create_post(request):
    if request.data != {}:
        id = request.data["customer_id"]
        title = request.data["title"]

        user = Customer.objects.filter(id=id)
        
        if user.count() != 0:
          post_obj = Post(owner=user, title = title)
          post_obj.save()

затем я получаю эту ошибку. как я могу исправить эту ошибку?

Я предполагаю, что эта строка вызывает у вас проблему:

user = Customer.objects.filter(id=id)

Измените его на:

user = Customer.objects.get(id=id)

А еще лучше, если вы хотите убедиться, что в сессии аутентифицирован именно пользователь, тогда вы можете сделать следующее:

user = Customer.objects.get(user=request.user.pk)

Стоит также отметить, что поле, по которому мы фильтруем user, может не совпадать с именем поля, которое вы указали в вашей модели Customer, и если это не user, просто замените его на поле, связывающее Customer и djangos user model (если только вы не создали абстрактную модель пользователя под названием customer, которая использует django user в качестве базы, тогда, id=id или id=request.user.id будет достаточно в качестве замены в этом случае).

Пояснение: Я полагаю, что вы пытаетесь установить ForeignKey, но вы передаете ему queryset, который не имеет полей, а скорее группу одного объекта customer.

@shamsucm будет ли следующий код выдавать ту же ошибку? Ответ от @Swift был очень убедительным, и если у вас все еще та же проблема, это может быть связано с какой-то другой частью вашего кода.

@api_view(["POST"])
def create_post(request):
    if request.data != {}:
        id = request.data["customer_id"]
        title = request.data["title"]

        user = Customer.objects.filter(id=id).first()
        
        if user:
          post_obj = Post(owner=user, title=title)
          post_obj.save()
Вернуться на верх