Reputation: 930
I'm trying to create a new object of my model, but keep on getting a value of none for one field.
My models look like this:
class KeyCategory(models.Model):
program = models.ForeignKey('Program', verbose_name='Programm', on_delete=models.CASCADE)
name = models.CharField('Name', max_length=100)
events = models.ManyToManyField('Event', through='EventQuota')
class Meta:
verbose_name = 'Category'
verbose_name_plural = 'Categories'
ordering = ['name']
unique_together = ("program", "name")
permissions = (
('view_key_category', 'Have access to categories'),
)
class EventQuota(models.Model):
key_category = models.ForeignKey(KeyCategory, on_delete=models.CASCADE, related_name='key_quota')
event = models.ForeignKey('Event', on_delete=models.CASCADE, related_name='key_quota')
quota = models.PositiveIntegerField('Quota', default=0)
class Meta:
verbose_name = 'Quota'
verbose_name_plural = 'Quotas'
unique_together = ('key_category', 'event')
When I try now to create a KeyCategory and my EventQuota, the field "events" for KeyCategory always returns core.Event.None
if program.pk == 1:
for _ in range(0, 2):
key_category = KeyCategory(
program=program,
name=random.choice(self.eventList)
)
key_category.save()
event_quota = EventQuota(
key_category=key_category,
event = random.choice(eventList),
quota = random.randint(0,100)
)
event_quota.save()
Note: the eventList
in the random.choice
is a queryset list of objects.
I tried to follow Djangos Extra fields on Many-to-Many relationships example, but somehow it seems that I'm missing something here or doing something not the right way? Would appreciate any help! Thanks in regard.
Logging:
import logging
logger = logging.getLogger(__name__)
logger.debug(key_category.events)
Upvotes: 0
Views: 71
Reputation: 373
When you access key_category.events you are asking for the value of a field (or a single object for foreign key fields). However with a ManyToMany relationship you are asking for multiple objects (a queryset). Using key_category.events.all() returns the objects related to the key_category, not just a single value.
core.events.all()
Upvotes: 1