Как определить 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)