[英]Create an object before calling the save method
我想在调用save方法之前在Django中创建一个对象。 该对象将通过ForeignKey值创建,为了将值写入而不是选择它,我将Foreignkey字段更改为看起来像输入字段。
我在2个不同的模型文件中有2个班级
class Category(models.Model):
title = models.ForeignKey(Title, verbose_name="Title")
和
class Title(models.Model):
title = models.CharField("Title", primary_key=True, max_length=200)
创建类别时,我必须选择或编写数据库中已经存在的标题,当尝试使用新标题创建类别时,出现以下错误:
Select a valid choice. That choice is not one of the available choices.
我想要做的是在创建类别之前,根据我在ForeignKey字段中编写的内容创建标题,以便可以立即使用。
我试图在保存类别之前重新定义save方法来保存标题对象,但是它不起作用。
任何帮助将不胜感激。
谢谢
保存是在表单验证之后执行的,您可以在验证期间创建类别obj。
看看您可以在django docs http://docs.djangoproject.com/en/dev/ref/forms/validation/#cleaning-and-validating-fields-that-depend-上覆盖的表单字段的干净方法上的每其他
感谢您的代码,我已经对其进行了测试。 但这并不是我想要的,我将解释我想做什么。
假设我们的模型中有Category和Article类,每个类都有一个标题。 为了使此标题可重复使用,我创建了另一个将管理字段的应用程序,创建了Title类,并将其作为外键添加到Category和Article表单中。
我使用raw_id_fields将选择框切换到输入字段。
现在,当我创建类别或文章时,我必须选择或编写标题,当该标题存在时,它可以正常工作,但是当它不存在时,我想在创建类别之前创建它,以便可以使用它。
我尝试在save方法,pre_save信号和clean方法中执行此操作,但始终收到错误消息“选择一个有效的选择。该选择不是可用的选择之一。”
我现在使用一种硬编码解决方案来创建标题,我只想看看它是否可以工作,这些是我在创建类别之前插入不同方法创建标题的行:
t = Title(title = "MyTitle")
t.save()
我尝试创建一个以MyTitle作为标题的类别,但是遇到相同的错误,当我尝试使用现有标题创建另一个类别时,它起作用并且创建了标题“ MyTitle”。 这意味着对象的创建是在表单验证之后进行的。 我想要的只是在做这个。 标题对象应在验证之前创建。
非常感谢您的帮助
您可能应该考虑将代码以在模型的管理器中创建Category条目:
class CategoryManager(Manager):
def create_category(category, title):
t = Title.objects.get_or_create(title=title)
return self.create(title=t)
class Category(models.Model):
title = models.ForeignKey(Title, verbose_name="Title")
objects = CategoryManager()
然后,每次要创建类别时都使用create_category。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.