Как определить ManyToManyField в Django для тестов

Для тестирования моих сериализаторов в django rest framework я использую метод Model Name.objects.create для создания полей. Но я не могу создать поле ManyToManyField.

Догадайтесь, во-первых, мне нужно создать объекты для первой модели и для второй модели, иначе не удастся создать связанное ManyToManyField. Но все равно не могу определить ManyToManyField для теста с помощью метода create.

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

models.py

class Book(models.Model):
    name = models.CharField(max_length=255)
    price = models.DecimalField(max_digits=7, decimal_places=2)
    author_name = models.CharField(max_length=200)
    owner = models.ForeignKey(User, on_delete=models.SET_NULL, null=True, related_name='my_books')
    readers = models.ManyToManyField(User, through='UserBookRelation', related_name='books')

test.py

class BookSerializerTestCase(TestCase):

    def setUp(self):
        self.user = User.objects.create(username='test_username')
        self.book_1 = Book.objects.create(name='Test book 1', price=750, author_name='Author 1', owner=self.user)
        self.book_2 = Book.objects.create(name='Test book 2', price=650, author_name='Author 1', owner=self.user)

    def test_readers(self):
        users = [self.user]
        reader = self.book_1.readers.set(users)
        print(f'Readers: {reader}')

readers это None, как определить self.user?

Заранее спасибо.

Я думаю, что команда правильная. Вы можете определить ManyToMany с помощью set и изменить с помощью add, remove. Вы также можете использовать только их идентификаторы, как показано ниже.

self.book_1.readers.set([self.user.id])
self.book_1.readers.add(1)
self.book_1.readers.remove(1)
Вернуться на верх