我有以下model.py文件:
class CustomUser(AbstractUser):
created = models.DateTimeField(auto_now_add=True)
job = models.CharField(max_length=100, blank=True)
photo = models.FileField(upload_to='Images/',
default='Images/None/No-img.jpg')
def __str__(self):
return "%s%s" % (self.first_name, self.last_name)
class Meta:
ordering = ('created', )
class Clique(models.Model):
# holds when the clique was created
created = models.DateTimeField(auto_now_add=True)
# holds the name of the clique
name = models.CharField(max_length=100, blank=False)
# holds the members of the clique
members = models.ManyToManyField(CustomUser, blank=True)
def __str__(self):
return self.name
class Meta:
ordering = ('created', )基本上,我有一个面向用户的模型和一个面向集团的模型。一个用户可以在多个集团中,一个集团可以有多个用户。我想要的是,当一个用户创建一个集团,然后他应该自动添加到集团作为成员。因此,在我的views.py文件中,我像这样覆盖了perform_create()方法:
class CreateClique(generics.CreateAPIView):
'''
This class creates a Clique for the user who made the
request.
'''
# define the serializer class
serializer_class = CliqueSerializer
# we use token authentication
authentication_classes = (TokenAuthentication,)
# user must be authenticated
permission_classes = (permissions.IsAuthenticated,)
def perform_create(self, serializer):
user = self.request.user # get the user
data = self.request.data # get the data the user has sent
# first check if we have the name of the clique
if 'name' in data:
name = data['name'] # retrieve the clique name
clique = Clique.objects.create(name=name)
clique.members.add(user)
serializer.save() 但是当我创建一个小团体(例如,名为'Test')时,我的数据库中就有了该小团体的2个实例。我可以通过shell命令看到:
>>> from users.models import Clique
>>> cl = Clique.objects.all()
>>> cl
<QuerySet [<Clique: Test>, <Clique: Test>]>
>>> 为什么会发生这种情况?我该如何解决这个问题呢?
发布于 2019-06-11 01:09:32
这是因为您有Clique.objects.create(name=name)和serializer.save(),这就是您将有两个实例的原因。
基本上你需要做的是
def perform_create(self, serializer):
serializer.save() # here your object will be created and put in serializer.instance
serializer.instance.members.add(self.request.user)https://stackoverflow.com/questions/56530512
复制相似问题