Home > front end >  How to define ManyToManyField in Django for tests
How to define ManyToManyField in Django for tests

Time:06-16

To test my serializers in Django rest framework I use create() method to create fields. But I can't create ManyToManyField.

Guess, firstly I need to create objects for first model and for second model otherwise ManyToManyField bound can't be created. But still can't define ManyToManyField for test with create method.

Please help me to realize how it should work correctly. I've read Django documentation, but haven't got how to solve my issue.

Here is my code example:

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 is None, how to define self.user?

CodePudding user response:

I think the command is correct. You can define ManyToMany using set and modify using add, remove. You can also use just ids of them like the following.

self.book_1.readers.set([self.user.id])
self.book_1.readers.add(1)
self.book_1.readers.remove(1)
  • Related