【问题标题】:django-rest-framework days-of-week representation in modeldjango-rest-framework 模型中的星期几表示
【发布时间】:2022-11-23 10:41:39
【问题描述】:

我想创建一个计划模型来在一周中的几天安排媒体

class Schedule(models.Model):
    name = models.CharField(max_length=100)
    start_date = models.DateTimeField()
    end_date = models.DateTimeField()

    week_days = ???
    date_created = models.DateTimeField(auto_now_add=True)
    date_updated = models.DateTimeField(auto_now=True)
    status = models.BooleanField(default=True)

    def __str__(self):
        return self.name

但问题在于 week_days 它可以有多天 我如何设计 Django 休息框架中的 week_days 字段?

【问题讨论】:

    标签: django api django-models django-rest-framework model


    【解决方案1】:

    为一周中的几天创建模型,并在 Schedule 模型中使用 M2M 字段

    模型.py

    
    class DaysOfWeek(models.Model):
        name = models.CharField(verbose_name="Name", max_length=10)
        
        def __str__(self):
            return self.name
        
        class Meta:
            ordering = ('id',)
        
    
    class Schedule(models.Model):
        name = models.CharField(verbose_name="Name", max_length=50)
        week_days = models.ManyToManyField(DaysOfWeek, related_name="schedules", verbose_name="Days of Week")
    
        def __str__(self):
            return self.name
    

    序列化程序.py

    class ScheduleSerializer(serializers.ModelSerializer):
        week_days = serializers.PrimaryKeyRelatedField(
            queryset=DaysOfWeek.objects.all(), many=True,)
    
        class Meta:
            model = Schedule
            fields = ['name', 'week_days']
    
    

    视图.py

    from rest_framework import viewsets
    
    
    class ScheduleView(viewsets.ModelViewSet):
        serializer_class = ScheduleSerializer
        queryset = Schedule.objects.all()
        pagination_class = None
    

    网址.py

    因为我们在 views.py 中使用 ModelViewSet,所以我们可以使用路由器来设置 URL,并使用带有所有 http 方法(get、put、patch、delete 等)的单个 URL

    from rest_framework.routers import DefaultRouter
    
    
    router = DefaultRouter()
    router.register(r'schedule', ScheduleView, basename='schedule')
    

    在邮递员中,使用/schedule/ 来创建和获取列表。

    要获取对象、更新或删除,请使用/schedule/<id>/

    【讨论】:

    • 我能知道序列化器和视图如何为这个模型工作吗?
    • 当然。我已经用视图和序列化程序更新了答案。
    猜你喜欢
    • 2011-08-23
    • 2019-12-10
    • 2021-12-23
    • 2013-11-11
    • 1970-01-01
    • 1970-01-01
    • 2021-08-19
    • 2019-02-25
    相关资源
    最近更新 更多