@fox1510

Как сделать автозаполнение ForeignKey поля в админке?

Имеются следующие модели:

class Seller(models.Model):
    user_seller = models.ForeignKey(User, blank=True, null=True)
    
    def __str__(self):
        return self.user_seller.get_username()


class Item(models.Model):
    user = models.ForeignKey(Seller, blank=True, null=True)
    # Тут другие поля

    def __str__(self):
        return self.item_name

В админке Django надо сделать так, чтобы при добавлении Item, user устанавливался автоматически на основе пользователя. Т.е. механизм такой: admin (superuser) в админке добавляет Seller'a, после чего этот Seller может добавить Item, а поле user для каждого Item'a должно устанавливаться автоматически на основе данных Seller'a, который и добавляет Item.
Пытался сделать так:

def save_model(self, request, obj, form, change):
      if form.is_valid():
        obj.user = Seller.objects.filter(user_seller = request.user)
        obj.save()

На что мне Django говорило, что "Item.user" must be a "Seller" instance. И сказать по-правде я не очень понимаю из-за чего возникает эта ошибка.

P.S. Django только начинаю изучать, поэтому сильно не пинайте за глупые вопросы.
  • Вопрос задан
  • 3020 просмотров
Решения вопроса 1
Вам надо написать
Seller.objects.filter(user_seller = request.user).first()


filter() возвращает не отдельный объект, а коллекцию объектов - QuerySet. Вызов first() возвращает первый объект в коллекции или None, если она пуста.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
srgtmn
@srgtmn
Python-Django моя главная боль
Я бы написал так:
from django.contrib.auth.models import User

***

def save_model(self, request, obj, form, change):
      if form.is_valid():
        obj.user = request.user
        obj.save()
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы