因为有一些关于m2m和DRF的问题,我会尽量缩小我感兴趣的范围。让我们称这两种模式为“文章”和“出版物”。假设:
“publication”对象已存在。
“article”对象可能存在,也可能不存在。具体来说:
a)如果以前的出版物中包含该文章,则该文章已被删除 在那里。你知道吗
b)如果没有,则需要创建文章。
我想用正文中的文章数据发送一个post-http请求 以及可从url获得的发布id,该url将:
a)如果文章已经存在,请将其链接到出版物
b)如果文章不存在,则创建它,然后将其链接到出版物
采取下面的“违约”策略是行不通的。我可以想出两种方法来解决这个问题:
重写项目序列化程序上的create方法。然而,我怀疑这样做,因为这似乎是一个问题,应该是共同的,有一个非定制的解决方案。你知道吗
有没有其他方法或内置的DRF解决方案来解决这个问题?你知道吗
我现在的处境是:
你知道吗型号.py你知道吗
class Publication(models.Model):
name = models.CharField(max_length=255, unique=True)
collection = models.CharField(max_length=255)
class Article(models.Model):
major = models.IntegerField()
minor = models.IntegerField()
publication = models.ManyToManyField(Publication)
class Meta:
constraints = [models.UniqueConstraint(fields=['major', 'minor'], name='unique_article')]
你知道吗视图.py你知道吗
class ArticleViewSet(viewsets.ModelViewSet):
serializer_class = ArticleSerializer
queryset = Article.objects.all()
你知道吗序列化程序.py你知道吗
class ArticleSerializer(serializers.ModelSerializer):
publication = serializers.SlugRelatedField(slug_field='name', queryset=Publication.objects.all()), many=True)
class Meta:
model = Article
fields = '__all__'
当发布到这个端点时,如果文章已经存在,而不是刚刚链接的文章,我会得到一个“重复条目”完整性错误。你知道吗
这是我过去处理这个问题的方式。如果您使用主键,这些调用不会很昂贵。你知道吗
相关问题 更多 >
编程相关推荐