Django-为“创建外键”;至“U字段”;如果不存在
我有两个型号(+2个不重要) 支持链接自定义Django-为“创建外键”;至“U字段”;如果不存在,django,save,Django,Save,我有两个型号(+2个不重要) 支持链接自定义save方法在create和update上自动创建kod,保持kod不变 在创建Lead时,如果链接不存在,我希望自动创建链接。最好的方法是什么 这是我第二天在用foreignkey定制保存方法时寻找最佳方法,但我缺乏想法 class Link(models.Model): landing = models.ForeignKey(Landing, default=1, on_delete=models.PROTECT) partner
save
方法在create
和update
上自动创建kod
,保持kod
不变
在创建Lead时,如果链接不存在,我希望自动创建链接。最好的方法是什么
这是我第二天在用foreignkey定制保存方法时寻找最佳方法,但我缺乏想法
class Link(models.Model):
landing = models.ForeignKey(Landing, default=1, on_delete=models.PROTECT)
partner = models.ForeignKey(Partner, default=1, on_delete=models.PROTECT)
kod = models.CharField(max_length=16, unique=True, blank=True, null=False)
def save(self, *args, **kwargs):
if self.kod is None:
self.kod = id_generator(16)
if len(self.kod) != 16:
self.kod = id_generator(16)
if self.pk is not None:
current = Link.objects.get(pk=self.pk)
if current.kod != self.kod:
self.kod = current.kod
super(Link, self).save(*args, **kwargs)
class Lead(models.Model):
link = models.ForeignKey(Link, to_field='kod', on_delete=models.PROTECT)
transactionid = models.CharField(max_length=64, blank=True)
**编辑:**使用:
link = models.ForeignKey(Link, to_field='kod', default=Link.objects.get_or_create(kod='autogenerated123')[0], on_delete=models.PROTECT)
工作正常,但前提是有合作伙伴和登录页:
class Link(models.Model):
landing = models.ForeignKey(Landing, default=1, on_delete=models.PROTECT)
partner = models.ForeignKey(Partner, default=1, on_delete=models.PROTECT)`
django.db.utils.ProgrammingError:关系“appname\u models\u link”不存在
第1行:…ls_link“.”opis“,”appname_models_link“,”created“FROM”appname_model
使用自定义保存方法确实是实现这一点的最佳方法。 你也可以使用信号,但这往往更难维持 使这个“更干净”的一种方法是创建模型类可以从中继承的混合。 如果你担心的话,你也可以定义kwargs的哪种行为。根据您的需求,您的restapi可能是一个处理这个问题的地方,但大多数情况下,我会使用您已经使用过的东西 你是说这个
class Lead(models.Model):
link = models.ForeignKey(Link, to_field='kod', on_delete=models.PROTECT)
transactionid = models.CharField(max_length=64, blank=True)
def save(self, *args, **kwargs):
if self.pk is None and hasattr(self,'link') is False:
self.link = Link()
self.link.save()
super(Lead, self).save(*args, **kwargs)
使用自定义保存方法确实是实现这一点的最佳方法。 你也可以使用信号,但这往往更难维持 使这个“更干净”的一种方法是创建模型类可以从中继承的混合。 如果你担心的话,你也可以定义kwargs的哪种行为。根据您的需求,您的restapi可能是一个处理这个问题的地方,但大多数情况下,我会使用您已经使用过的东西 你是说这个
class Lead(models.Model):
link = models.ForeignKey(Link, to_field='kod', on_delete=models.PROTECT)
transactionid = models.CharField(max_length=64, blank=True)
def save(self, *args, **kwargs):
if self.pk is None and hasattr(self,'link') is False:
self.link = Link()
self.link.save()
super(Lead, self).save(*args, **kwargs)
将此方法添加到潜在客户类别下面:
class Lead(models.Model):
link = models.ForeignKey(Link, to_field='kod', on_delete=models.PROTECT)
transactionid = models.CharField(max_length=64, blank=True)
@receiver (pre_save, sender=Lead)
def pre_save_handler(sender, instance, **kwargs):
if instance.link is None:
// Create your link here and then...
instance.link = your_link_here
instance.save()
我希望我能有所帮助在你的潜在客户课程下面添加此方法:
class Lead(models.Model):
link = models.ForeignKey(Link, to_field='kod', on_delete=models.PROTECT)
transactionid = models.CharField(max_length=64, blank=True)
@receiver (pre_save, sender=Lead)
def pre_save_handler(sender, instance, **kwargs):
if instance.link is None:
// Create your link here and then...
instance.link = your_link_here
instance.save()
我希望我能帮上忙django.db.models.fields.related_描述符.relatedObjectsDoesNotExist:Lead没有链接。奇怪的“bug”,通常,您可以访问leadObj.link,它应该返回None,但它会在self.link中抛出该错误。link为None,因此我现在使用hasattr,它正在运行django.db.models.fields.related_descriptor.relatedObjectsDoesNotExist:Lead没有链接。奇怪的“bug”,正常情况下,您可以访问leadObj.link,它应该返回None,但它会在self处抛出错误。link为None,因此我现在使用hasattr,它正在工作它也不工作,django.db.models.fields.related_descriptor.RelatedObjectDoesNotExist:Lead没有链接它也不工作,django.db.models.fields.related_descriptor.RelatedObjectDoe势利主义者:线索没有联系