Python 创建新对象将返回无值字段
我正试图为我的模型创建一个新对象,但一个字段的值始终为none 我的模型是这样的:Python 创建新对象将返回无值字段,python,django,many-to-many,Python,Django,Many To Many,我正试图为我的模型创建一个新对象,但一个字段的值始终为none 我的模型是这样的: class KeyCategory(models.Model): program = models.ForeignKey('Program', verbose_name='Programm', on_delete=models.CASCADE) name = models.CharField('Name', max_length=100) events = models.ManyToMan
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')
当我现在尝试创建KeyCategory和我的EventQuota时,KeyCategory的字段“events”总是返回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()
注意:random.choice
中的eventList
是对象的查询集列表
我试着以Djangos为例,但不知何故,我似乎遗漏了一些东西,或者做了一些不正确的事情?非常感谢您的帮助!谢谢你
日志记录:
import logging
logger = logging.getLogger(__name__)
logger.debug(key_category.events)
当您访问key_category.events时,您要求的是字段的值(或外键字段的单个对象)。但是,对于多个关系,您需要多个对象(查询集)。 使用key_category.events.all()返回与key_类别相关的对象,而不仅仅是单个值
core.events.all()
首先,模型中使用的名称与视图中使用的名称不同,请更正。这令人困惑。为什么在型号名称字段中使用前缀
access
name@Lemayzeur对不起,我弄错了,我以前改了一些名字,复制了一个错误的片段,现在它正确了你怎么/在哪里知道events
返回一个空值?@Lemayzeur我记录/调试了for循环后的字段并检查了它的值,因此看到它返回了core.Event.None
我不确定它是None
,因为core.Event.None
只是返回了应用程序的串联name+模型名+表示实例的字符串,以防您在事件模型中定义了\uu str\uu()
方法。要确保这一点,请直接检查事件模型