【问题标题】:Create A model In Django Which Accept Value For A Specific Choice在 Django 中创建一个接受特定选择值的模型
【发布时间】:2021-07-09 06:35:51
【问题描述】:

我在 Django 和 DRF(Django-Rest-Framework) 中工作,其中我有一个选择,如果视频是付费视频,现在我正在创建另一个模型来存储所有付费视频的信息

from django.db import models
from  userapi.models import User
# from taggit.managers import TaggableManager
import datetime

class post(models.Model) : 
    Public = 'Pub'
    Private = 'Pri'
    Paid = 'Paid'
    selection = [
        (Public, 'Public'),
        (Private, 'Followers'),
        (Paid, 'Paid'),
    ]
    username = models.ForeignKey(User, on_delete=models.CASCADE)
    post_description = models.TextField(max_length=500)
    post_timestamp = models.DateTimeField(auto_now = True)
    post_selection = models.CharField(max_length=10,choices=selection)

    def __str__(self):
        return self.username

这是 userpost.py 现在我想创建一个名为paid_videos 的模型,如果 post_selection 是付费的,那么它需要它的数量

我是 DJANGO 的新手

【问题讨论】:

    标签: python-3.x django django-models django-rest-framework


    【解决方案1】:

    你可以这样做:

    post.objects.create(post_selection="Public")
    

    只需将字符串作为参数传递。

    但是您的代码几乎没有问题:

    • 您需要用大写字母命名您的班级,以便您发布 -> 发布
    • selection 是一个常量,因此最好使用大写的“SELECTION”

    文档中有一个很好的例子:

    class Student(models.Model):
    FRESHMAN = 'FR'
    SOPHOMORE = 'SO'
    JUNIOR = 'JR'
    SENIOR = 'SR'
    GRADUATE = 'GR'
    YEAR_IN_SCHOOL_CHOICES = [
        (FRESHMAN, 'Freshman'),
        (SOPHOMORE, 'Sophomore'),
        (JUNIOR, 'Junior'),
        (SENIOR, 'Senior'),
        (GRADUATE, 'Graduate'),
    ]
    year_in_school = models.CharField(
        max_length=2,
        choices=YEAR_IN_SCHOOL_CHOICES,
        default=FRESHMAN,
    )
    

    这更容易阅读并且它具有默认值,因此您的代码不会出现完整性错误

    【讨论】:

      猜你喜欢
      • 2021-03-07
      • 2013-07-28
      • 1970-01-01
      • 1970-01-01
      • 2020-10-06
      • 2017-10-08
      • 1970-01-01
      • 1970-01-01
      • 2023-03-09
      相关资源
      最近更新 更多