簡體   English   中英

將模型對象ID從模型復制到Django中的另一個模型

[英]Copy Model Object Id From a Model To Another Model In Django

我想將數據從一個模型復制到另一個模型,我在Django中找到了一個將模型對象從一個模型復制到另一個模型的示例,但出現錯誤:

AttributeError:'BigAutoField'對象沒有屬性'wid'。

我想wid的tobjects模型來獲得Idw_orders模型。 這是我的代碼:

models.py

class w_orders(models.Model): 
    Id = models.BigAutoField(primary_key=True)
    datedefwo = models.DateField(default=datetime.now)
    datesched = models.DateField(blank=True, null=True)
    datefinished = models.DateField(blank=True, null=True)
    sign = models.BigIntegerField(blank=True, null=True)
    statusid = models.BigIntegerField(blank=True, null=True, default=1, choices=STATUS_CHOICES)
    typeid = models.BigIntegerField(blank=True, null=True, default=1, choices=TYPE_CHOICES)
    comments = models.CharField(max_length=254, blank=True, null=True)
    navid = models.BigIntegerField(blank=True, null=True)
    navkonsid = models.CharField(max_length=12, blank=True, null=True)
    navname = models.CharField(max_length=254, blank=True, null=True)
    navcustadr = models.CharField(max_length=254, blank=True, null=True)
    navdebt = models.FloatField(blank=True, null=True)
    navpropcode = models.CharField(max_length=254, blank=True, null=True)
    navdepcode = models.CharField(max_length=254, blank=True, null=True)
    navphoneno = models.CharField(max_length=254, blank=True, null=True)
    navreasoncomp = models.CharField(max_length=254, blank=True, null=True)
    nightshift = models.BooleanField(default=False)
    priority = models.BigIntegerField(blank=True, null=True)
    stid = models.BigIntegerField(blank=True, null=True)
    mapurl = models.CharField(max_length=254, blank=True, null=True)

    def __unicode__(self):
        return self.Id

    def save(self, *args, **kwargs):
        super(w_orders, self).save(*args, **kwargs)
        newob = tobjects()
        ...
        newob.save()



class tobjects(models.Model): 
    oid = models.BigAutoField(primary_key=True)
    wid = models.ForeignKey(w_orders, on_delete=models.CASCADE)
    objtypegisid = models.BigIntegerField(blank=True, null=True, default=1)
    objgisid = models.BigIntegerField(blank=True, null=True, default=1)
    condgenid = models.BigIntegerField(blank=True, null=True, default=1)
    condriskid = models.BigIntegerField(blank=True, null=True, default=1)
    condratsid = models.BigIntegerField(blank=True, null=True, default=1)
    condmhcoverid = models.BigIntegerField(blank=True, null=True, default=1)
    condmhwallid = models.BigIntegerField(blank=True, null=True, default=1)
    condpipehydrsid = models.BigIntegerField(blank=True, null=True, default=1)
    condpipehydreid = models.BigIntegerField(blank=True, null=True, default=1)
    condpipedepvolsid = models.BigIntegerField(blank=True, null=True, default=1)
    condpipedepvoleid = models.BigIntegerField(blank=True, null=True, default=1)
    condpipedepconssid = models.BigIntegerField(blank=True, null=True, default=1)
    condpipedepconseid = models.BigIntegerField(blank=True, null=True, default=1)
    txt = models.CharField(max_length=254, blank=True, null=True)

    def __unicode__(self):
        return self.oid
class w_orders(models.Model): 
    Id = models.BigAutoField(primary_key=True)
    datedefwo = models.DateField(default=datetime.now)
    datesched = models.DateField(blank=True, null=True)
    datefinished = models.DateField(blank=True, null=True)
    sign = models.BigIntegerField(blank=True, null=True)
    statusid = models.BigIntegerField(blank=True, null=True, default=1, choices=STATUS_CHOICES)
    typeid = models.BigIntegerField(blank=True, null=True, default=1, choices=TYPE_CHOICES)
    comments = models.CharField(max_length=254, blank=True, null=True)
    navid = models.BigIntegerField(blank=True, null=True)
    navkonsid = models.CharField(max_length=12, blank=True, null=True)
    navname = models.CharField(max_length=254, blank=True, null=True)
    navcustadr = models.CharField(max_length=254, blank=True, null=True)
    navdebt = models.FloatField(blank=True, null=True)
    navpropcode = models.CharField(max_length=254, blank=True, null=True)
    navdepcode = models.CharField(max_length=254, blank=True, null=True)
    navphoneno = models.CharField(max_length=254, blank=True, null=True)
    navreasoncomp = models.CharField(max_length=254, blank=True, null=True)
    nightshift = models.BooleanField(default=False)
    priority = models.BigIntegerField(blank=True, null=True)
    stid = models.BigIntegerField(blank=True, null=True)
    mapurl = models.CharField(max_length=254, blank=True, null=True)

    def __unicode__(self):
        return self.Id




class tobjects(models.Model): 
    oid = models.BigAutoField(primary_key=True)
    wid = models.ForeignKey(w_orders, on_delete=models.CASCADE)
    objtypegisid = models.BigIntegerField(blank=True, null=True, default=1)
    objgisid = models.BigIntegerField(blank=True, null=True, default=1)
    condgenid = models.BigIntegerField(blank=True, null=True, default=1)
    condriskid = models.BigIntegerField(blank=True, null=True, default=1)
    condratsid = models.BigIntegerField(blank=True, null=True, default=1)
    condmhcoverid = models.BigIntegerField(blank=True, null=True, default=1)
    condmhwallid = models.BigIntegerField(blank=True, null=True, default=1)
    condpipehydrsid = models.BigIntegerField(blank=True, null=True, default=1)
    condpipehydreid = models.BigIntegerField(blank=True, null=True, default=1)
    condpipedepvolsid = models.BigIntegerField(blank=True, null=True, default=1)
    condpipedepvoleid = models.BigIntegerField(blank=True, null=True, default=1)
    condpipedepconssid = models.BigIntegerField(blank=True, null=True, default=1)
    condpipedepconseid = models.BigIntegerField(blank=True, null=True, default=1)
    txt = models.CharField(max_length=254, blank=True, null=True)

    def __unicode__(self):
        return self.oid

    @receiver(post_save, sender=w_orders)
    def ensure_order_exists(sender, **kwargs):
        if kwargs.get('created', False):
            tobjects.objects.get_or_create(wid=kwargs.get('instance'))
for o in w_orders.objects.all():
    t = tobjects.create(wid=o)
    t.save()

也可以使用bulk_create,它速度更快,但僅適用於PostgreSQL(請閱讀https://docs.djangoproject.com/en/dev/ref/models/querysets/#bulk-create ):

tobjects.objects.bulk_create([tobjects(wid=o) for o in w_orders.objects.all()])

請考慮使用PEP 8作為您的代碼。 太可怕了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM