Saya memiliki dua model dasar:

class ModelA(models.model):
    ... #some fields
    score = models.IntegerField()

class ModelB(models.model)
    ... #some fields
    related_model=models.OneToOneField(ModelA)
    score = models.IntegerField(default=related_model.score)

Yang saya inginkan adalah bahwa setelah pembuatan ModelB, bidang skornya diisi dengan nilai skor ModelA yang memiliki hubungan OneToOne.

Saya telah mencoba menyetel score = models.IntegerField(default=related_model.score) tetapi setelah migrasi saya mendapatkan kesalahan:AttributeError: 'OneToOneField' object has no attribute 'score'

Saya juga mencoba mendefinisikan metode di bawah ModelB sebagai berikut dan meneruskannya ke default:

def get_score(self, *args, **kwargs):
    return self.threat.score

Ini juga tidak berhasil. ketika saya mengatur default=get_score() saya mendapatkan kesalahan: missing one required positional argument: self

Bagaimana saya bisa secara otomatis mengatur bidang model menjadi bidang bidang model terkait (oleh OneToOne Relation)?

2
Amir Afianian 3 Agustus 2019, 10:45

1 menjawab

Jawaban Terbaik

Anda harus melakukan ini di save.

def save(self, *args, **kwargs):
    if not self.score:
        self.score = self.threat.score
    return super().save(*args, **kwargs)
2
Daniel Roseman 3 Agustus 2019, 07:58