如何在ForeignKey中选择其他字段而不是模型的__str__方法?

时间:2019-12-15 19:06:50

标签: python django

在我的模型中,我想选择另一个模型字段,而不是模型的 str 方法。我曾经使用过to_field但没有用,还有其他方法可以做到这一点吗?

我的模特

class Porumbei(models.Model):
    ...

    id_porumbel = models.AutoField(primary_key=True)
    data_adaugare = models.DateTimeField(default=timezone.now, null=True, blank=True)
    crescator = models.ForeignKey(get_user_model(), on_delete=models.CASCADE, null=True, blank=True,
                              related_name='porumbeii')
    serie_inel = models.CharField(max_length=25, null=False, blank=False, unique=True,
                              help_text="Seria de pe inel. Ex: RO 123456")
    anul = models.CharField(max_length=4, null=False, blank=False)
    culoare = models.ForeignKey(CuloriPorumbei, on_delete=models.CASCADE, null=False, blank=False, )
    culoare_ochi = models.ForeignKey(CuloriOchi, on_delete=models.CASCADE, null=False, blank=False, )
    sex = models.CharField(max_length=6, choices=SEXE)
    ecloziune = models.DateField(null=True, blank=True)
    rasa = models.CharField(max_length=50, null=True, blank=True)
    linie = models.CharField(max_length=50, null=True, blank=True)
    nume = models.CharField(max_length=50, null=True, blank=True)
    tata = models.ForeignKey('Perechi', to_field='mascul', on_delete=models.CASCADE,
                         related_name="porumbei_masculi", null=True, blank=True)
    mama = models.ForeignKey('Perechi', to_field='femela', on_delete=models.CASCADE,
                         related_name="porumbei_femele", null=True, blank=True)

    def __str__(self):
        return self.serie_inel

class Perechi(models.Model):
    boxa = models.PositiveIntegerField(primary_key=True, unique=True)
    sezon = models.CharField(max_length=4, null=False, blank=False, default=datetime.now().year)
    mascul = models.ForeignKey(Porumbei, unique=True, on_delete=models.CASCADE, limit_choices_to=Q(sex="Mascul"),
                           related_name="perechi_masculi")
    femela = models.ForeignKey(Porumbei, unique=True, on_delete=models.CASCADE, limit_choices_to=Q(sex="Femelă"),
                           related_name="perechi_femele")

    def __str__(self):
        return self.boxa

我希望在tata字段中添加新的Porumbei来选择perechi.mascul而不是perechi.boxa。与Porumbei的妈妈场相同。我该怎么办?预先感谢!

0 个答案:

没有答案