У меня есть 2 модели, которые выглядят так:
class Topic(models.Model):
name = models.CharField(max_length=25, unique=True)
def save(self, *args, **kwargs):
topic = Topic.objects.filter(name=self.name)
if topic:
return topic[0].id
super(Topic, self).save(*args, **kwargs)
return self.id
class PostTopic(models.Model):
topic = models.ForeignKey(Topic, on_delete=models.CASCADE)
post= models.ForeignKey(Post, on_delete=models.CASCADE)
Если topi c уже находится в таблице Topic
, то мы возвращаем идентификатор этой topi c. Мы не создаем другого. Когда пользователь отправляет Post
с помеченными темами (представьте, что это хештеги), тогда, если эти темы не существуют в таблице Topic
, они будут созданы вместе со связью в PostTopic
* 1009. Как говорится, вот как выглядит мой сериализатор:
class PostSerializer(serializers.ModelSerializer):
topics = serializers.ListField(
child=serializers.CharField(max_length=256), max_length=3
)
class Meta:
model = Post
fields = ('user', 'status', 'topics')
def create(self, validated_data):
topics= validated_data.pop('topics')
post = Post.objects.create(**validated_data)
for topic in topics:
topic_id = Topic(name=topic).save()
PostTopic(post_id=post.id, topic_id=topic_id).save()
return post
В настоящее время мой сериализатор дает мне AttributeError
, потому что themes не является полем в Post
. Как я могу это исправить, чтобы я мог заставить его работать? Если я использую PostTopic
, то как я могу заставить пользователя задавать актуальные темы?