我正在尝试创建一个表单,用户可以在其中创建博客。该表格将具有标题,一对多作者和内容。对于作者而言,我想有一个输入自动完成搜索框(例如stackoverflow的标签搜索框),它将作者添加到博客中。我知道如何创建前端外观,但是就使用Django的REST框架在模型中添加作者而言,我不知道该怎么做。
型号:
x = pd.to_datetime(df['CloseTime']).dt.time.astype(str)
y = df['Time'].astype(str)
# convert `x` and `y` to `timedelta`, then subtract
df['diff'] = pd.Series.sub(*map(pd.to_timedelta, (x, y)))
df
Time CloseTime diff
17 09:30:00 2019-04-22 09:32:00 00:02:00
27 09:30:00 2019-05-13 09:32:00 00:02:00
36 09:30:00 15:15:00 05:45:00
37 09:30:00 15:15:00 05:45:00
44 09:30:00 2019-05-24 09:32:00 00:02:00
76 09:30:00 2019-06-07 09:32:00 00:02:00
92 09:30:00 2019-06-17 09:32:00 00:02:00
如何从输入中遍历每个添加的作者并将其添加到StoryAuthor模型中?因此,例如,一个故事应如下所示:
class Story(models.Model):
title = models.CharField(max_length=100, null=False)
content = models.TextField()
created_at = models.DateField(auto_now_add=True)
class StoryAuthor(models.Model):
story = models.ForeignKey(Story, on_delete=models.CASCADE)
user = models.ForeignKey(User, on_delete=models.CASCADE)
就输入框而言,数据应如下所示:“ John,Jack,Brad”如何使用Django的REST来拥有可以执行此操作的序列化器/端点?
答案 0 :(得分:1)
假设您正在使用Serializers,下面是解决方法。
只需在您的Story模型中添加ManyToMany Field:
class Story(models.Model):
title = models.CharField(max_length=100, null=False)
content = models.TextField()
created_at = models.DateField(auto_now_add=True)
#new field
authors = models.ManyToManyField(User, through='StoryAuthor')
然后在您的序列化程序中,将作者字段添加到序列化程序(CustomSerialzer)并编写用户序列化程序(如果您还没有的话):
class UserSerializer(serializers.Serializer):
username = serializers.CharField(max_length=100)
class StorySerializer(serializers.ModelSerializer):
authors = UserSerializer(read_only=True, many=True)
class Meta:
...
注意:
如果您不打算在StoryAuthor
中添加额外的字段,则无需自己编写StoryAuthor类。只需在Story类中添加authors字段而不使用'through'参数,Django的ORM将处理数据透视表。