Когда я пытаюсь выполнить 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()