Django的ManyToManyField,提供更多国家信息
我正试图找出如何使用Django中的Django的ManyToManyField,提供更多国家信息,django,python-3.x,django-models,Django,Python 3.x,Django Models,我正试图找出如何使用Django中的ManyToManyField添加附加信息。例如,此代码: class Animal(models.Model): # ... pass class Log(models.Model): animal = models.ManyToManyField(Animal) 如果我想创建一个Log对象,并选择Animal对象。然后我想在我的日志中包含更多信息,比如头发的颜色,以及动物对象的眼睛颜色(我不能在动物对象本身中添加这些内容) 然后
ManyToManyField
添加附加信息。例如,此代码:
class Animal(models.Model):
# ...
pass
class Log(models.Model):
animal = models.ManyToManyField(Animal)
如果我想创建一个Log
对象,并选择Animal
对象。然后我想在我的日志
中包含更多信息,比如头发的颜色,以及动物
对象的眼睛颜色(我不能在动物
对象本身中添加这些内容)
然后我想再向Log对象添加另一个完全相同的对象。比如一只狐狸。所以我想为两个不同的狐狸添加两次动物对象到日志中。这些特征是相同的,但唯一的是头发颜色的一些轻微变化。如何做到这一点 如果要使用m2m字段,可以指定模型之间的贯穿模型,并可以携带附加信息,例如()。一些自定义功能可以使用通过模型提供的信号来完成。可以通过Log.animal.through访问它
但我认为你的设计很糟糕。更好的做法是在日志上使用没有反向关系的外键,并向post save添加信号,这将创建日志的创建实例并向其添加信息,并将fk设置为动物的创建实例 如果要使用m2m字段,可以指定模型之间的贯穿模型,并可以携带附加信息,例如()。一些自定义功能可以使用通过模型提供的信号来完成。可以通过Log.animal.through访问它
但我认为你的设计很糟糕。更好的做法是在日志上使用没有反向关系的外键,并向post save添加信号,这将创建日志的创建实例并向其添加信息,并将fk设置为动物的创建实例 django默认情况下创建第三个模型来处理多个关系,您可以通过使用到覆盖此模型并将自定义字段添加到其中,如前所述,如下面代码所示使用它:
from django.db import models
class Person(models.Model):
name = models.CharField(max_length=128)
def __str__(self):
return self.name
class Group(models.Model):
name = models.CharField(max_length=128)
members = models.ManyToManyField(Person, through='Membership')
def __str__(self):
return self.name
class Membership(models.Model):
person = models.ForeignKey(Person, on_delete=models.CASCADE)
group = models.ForeignKey(Group, on_delete=models.CASCADE)
date_joined = models.DateField()
invite_reason = models.CharField(max_length=64)
django默认情况下创建第三个模型来处理多个关系,您可以覆盖此模型,并通过使用到将自定义字段添加到其中,如前所述,按如下代码使用它:
from django.db import models
class Person(models.Model):
name = models.CharField(max_length=128)
def __str__(self):
return self.name
class Group(models.Model):
name = models.CharField(max_length=128)
members = models.ManyToManyField(Person, through='Membership')
def __str__(self):
return self.name
class Membership(models.Model):
person = models.ForeignKey(Person, on_delete=models.CASCADE)
group = models.ForeignKey(Group, on_delete=models.CASCADE)
date_joined = models.DateField()
invite_reason = models.CharField(max_length=64)
我真的很想知道你是否需要一个m2m场地。这意味着一个动物可以有零个、一个或多个日志,而一个日志可以有零个、一个或多个动物。您可以在django m2m字段中指定通过模型。我真的想知道您是否需要一个m2m字段。这意味着一个动物可以有零个、一个或多个日志,一个日志可以有零个、一个或多个动物。您可以在django m2m字段中指定通过模型。