标签: django-models

如何在 Django 中验证模型 clean 方法中的多个字段

在我的 Django 模型中,我使用clean()方法来验证两组字段的值。我用相同的方法容纳这两个条件clean()。但是我发现系统检查了第一个条件,而忽略了第二个条件。

这是我的模型和字段:

class Rates(models.Model):
    master_doc = models.ForeignKey(Origin, ...
    exit_rate = models.DecimalField(max_digits=7, decimal_places=2, null=True, blank=True, default=0.00)
    from_date = models.DateField(null=True, verbose_name='From date')
    to_date = models.DateField(null=True, verbose_name='To date')

    def clean(self):
        if self.exit_rate <= 0:
            raise ValidationError({'exit_rate': _('The exit rate must be more than 0.')})
        if self.from_date is not None:
            if (self.to_date == self.from_date):
                raise ValidationError({'to_date': _('From Date and end date may not be the same.')})
Run Code Online (Sandbox Code Playgroud)

在这种情况下,仅针对第一个 ie 字段引发验证错误exit_rate如果我颠倒检查的顺序,则仅针对日期字段(而不是费率字段)引发验证错误。

我尝试了这个解决方案并使用error_dict但出现错误 …

django django-models django-validation

0
推荐指数
1
解决办法
5959
查看次数

Django 模型 - 循环导入问题

我的 Django 项目使用三个应用程序,chat, user, sowi. 每个应用程序都有按以下方式构造的模型。启动服务器时出现错误,我认为这是因为我有循环导入。我该如何解决这个问题?

聊天/models.py

from user.models import User

class Chat(models.Model):
    name = models.CharField(max_length=100, default="private")


class Message(models.Model):
    sender = models.ForeignKey(User, on_delete=models.CASCADE)
    receiver = models.ForeignKey(Chat, on_delete=models.CASCADE)
Run Code Online (Sandbox Code Playgroud)

用户/模型.py

from chat.models import Chat
from sowi.models import Sowi

class User(AbstractUser):
    chats = models.ManyToManyField(Chat, blank=True)
    subscriptions = models.ManyToManyField(Sowi, related_name="subscriptions", blank=True)
    memberships = models.ManyToManyField(Sowi, related_name="memberships", blank=True)
    blocked = models.ManyToManyField("self", related_name="blocked", blank=True)
Run Code Online (Sandbox Code Playgroud)

sowi/models.py

from chat.models import Chat, Message
from user.models import User

class Sowi(models.Model):
    owner = models.ForeignKey(User, on_delete=models.CASCADE)
    chat = models.OneToOneField(Chat, blank=True, null=True, …
Run Code Online (Sandbox Code Playgroud)

python sqlite django django-models python-3.x

0
推荐指数
1
解决办法
2865
查看次数

Django UUIDFIeld unique=True、blank=True 和 null=True 的行为是否正确?

我正在向数据库添加一个字段:

identifier = models.UUIDField(unique=True, null=True, blank=True)

但我很好奇,当有人在管理员中保存没有值的实例时,这是否会表现得像 CharField 或数字字段。它会尝试将值保存为空字符串""还是会聪明地将其保存为null?我使用 Postgres 作为数据库。我看过CharField 的其他答案,但没有任何与 UUIDField 相关的答案。

我的最终目标是拥有一个保证唯一的字段,并且默认为null. 写成这样会不会更合适:

identifier = models.UUIDField(unique=True, null=True, default=None)或者如果没有提供值,管理表单验证会抱怨吗?

django django-models

0
推荐指数
1
解决办法
2133
查看次数

如何使用 Django 在电子邮件中发送 HTML?

我是 Django 新手。我想使用 django 通过电子邮件发送 html。我正在使用以下代码

  send_mail(
            'Email Title',
            'My Message',
            'webmaster@localhost', 
            [to mail],   
            fail_silently=False,
           ) 


  
Run Code Online (Sandbox Code Playgroud)

此代码发送简单的字符串,而不是发送 HTML。例如,如果我传递<h1>test</h1>消息正文,那么它将返回相同的结果。我想<h1>在“测试”中应用标签。怎么做 ?

python django django-models django-views django-mailer

0
推荐指数
1
解决办法
5925
查看次数

Django migrate AttributeError:'str'对象没有属性'_meta'

在对数据库模式进行了一些广泛的更改后,我运行了 makemigrations。它成功创建了迁移。但随后迁移失败:

AttributeError: 'str' object has no attribute '_meta'

这是我更改的代码。我将 Hardskills 的多对多模型从一张表拆分为 2 个不同的用户和作业表。

最初的

class Hardskills(models.Model):
    user = models.ManyToManyField(User, related_name="user_hs",through="HardskillsProfile")
    job = models.ManyToManyField(Job, related_name="job_hs",through="HardskillsProfile")
    hardskills = models.CharField(max_length=100, db_index=True)

    def __str__(self):
        return self.hardskills
    

class HardskillsProfile(models.Model):
    """Through Model for Many to Many relationship for user/jobs and hardskills"""
    user = models.ForeignKey(User, on_delete=models.CASCADE, related_name="user",null=True)
    job = models.ForeignKey(Job, on_delete=models.CASCADE, related_name="job",null=True)
    hardskills = models.ForeignKey(Hardskills, on_delete=models.CASCADE)
Run Code Online (Sandbox Code Playgroud)

修改后最终结果

from attributes.models import Category
from django.contrib.auth.models import User
from content.models import Job
from django.db import models

class Hardskills(models.Model):
    user …
Run Code Online (Sandbox Code Playgroud)

python sqlite django backend django-models

0
推荐指数
1
解决办法
1268
查看次数

如何为基于类的 APIView 实现 DjangoModelPermissions?它抛出查询集错误

场景:我有组和权限,权限与组关联,并且该组与用户关联。现在我尝试通过DjangoModelPermissions实现视图的权限

这对于实现查询集的以下代码行效果很好;

class UpdateCampaignView(generics.UpdateAPIView):
    authentication_classes = [TokenAuthentication]
    permission_classes = [DjangoModelPermissions]

    queryset = Campaign.objects.all()
    serializer_class = UpdateCampaignSerializer

    def get_object(self):
        campaign_id = self.request.data.get("id")
        return Campaign.objects.get(id =campaign_id)
Run Code Online (Sandbox Code Playgroud)

但我想将其实现为基于类的 APIView,无需使用 queryset 关键字,如下所示:

class RetrieveCampaignView(APIView):
    authentication_classes = [TokenAuthentication]
    permission_classes = [DjangoModelPermissions] #this is what i want to do
    
    def get(self, request, *args, **kwargs):
        try:
            campaign = Campaign.objects.get(id = request.data.get("id"))
            searializer = GetCampaignSerializer(campaign)
            return Response({"status":True , "payload":searializer.data})
        
        except:
            return Response({"status":False}, status=status.HTTP_404_NOT_FOUND)
Run Code Online (Sandbox Code Playgroud)

但这给出了以下错误:

djangorest框架错误无法在未设置.queryset或没有.get_queryset()方法的视图上应用DjangoModelPermissions

python django django-models django-views django-rest-framework

0
推荐指数
1
解决办法
1421
查看次数

尝试添加模型对象时长时间加载 Django Admin

我的 Django 应用程序遇到了非常烦人的问题。它已经部署到 Ubuntu Server,当我尝试访问任何名为“Detail”的模型对象时,它不会加载页面。当尝试通过 Django Admin 创建“Detail”对象时,也会发生同样的事情,只是无限下载。其他模型不会发生这种情况,尽管它们具有相同数量的对象(大约 181000 个)。在我将应用程序部署到服务器之前,它也发生在我的本地计算机上,因此问题不在于服务器。我想发生这种情况是因为数据库表中的对象数量较多,但必须有某种方法来解决这个问题,所以我希望有人可以帮助我解决这个问题。

python django postgresql django-models django-admin

0
推荐指数
1
解决办法
1004
查看次数

Django 错误:ValueError:无法分配“(&lt;类别:文化&gt;,True)”:“Site.category”必须是“类别”实例

我需要创建一个从 csv 文件导入数据的数据库。按照练习的说明,我创建了模型和脚本文件,但是当我运行命令时,python manage.py runscript many_load它在标题中给出了错误。这是代码:

- 模型.py:

from django.db import models


class Category(models.Model):
    category = models.CharField(max_length=128)

    def __str__(self):
        return self.category

class State(models.Model):
    state = models.CharField(max_length=25)

    def __str__(self):
        return self.state


class Region(models.Model):
    region = models.CharField(max_length=25)

    def __str__(self):
        return self.region

class Iso(models.Model):
    iso = models.CharField(max_length=5)

    def __str__(self):
        return self.iso

class Site(models.Model):
    name = models.CharField(max_length=128)
    year = models.CharField(max_length=128)
    area = models.CharField(max_length=128)
    describe = models.TextField(max_length=500)
    justify = models.TextField(max_length=500, null=True)
    longitude = models.TextField(max_length=25, null=True)
    latitude = models.TextField(max_length=25, null=True)

    #one to many field …
Run Code Online (Sandbox Code Playgroud)

python csv django django-models import-from-csv

0
推荐指数
1
解决办法
298
查看次数

Django:如何根据 django 中的视图过滤帖子

我想根据视图过滤帖子,例如view>100,如果视图大于 100 个视图,则过滤课程,但它一直显示此错误 SyntaxError: positional argument follows keyword argument。我过滤帖子的方式是问题所在,但我不知道执行此操作的正确方法。我的 models.py 中有一个字段views = models.In...,这就是为什么我尝试过滤课程,course = Course.objects.filter(views>100)然后它显示错误

模型.py

class Course(models.Model):
    course_title = models.CharField(max_length=100, null=True, blank=True)
    slug = models.SlugField(unique=True)
    views = models.IntegerField(default=0)
    
Run Code Online (Sandbox Code Playgroud)

视图.py

def index(request):
    pop_courses = Course.objects.filter(course_publish_status="published", views>100).order_by('?')
    
Run Code Online (Sandbox Code Playgroud)

python django django-models django-views django-rest-framework

0
推荐指数
1
解决办法
436
查看次数

如何在 django 中创建不同模式的表?

我在 django 项目中使用 postgresql 数据库。

我的项目中有多个应用程序。

users/
    UserProfile model
myapp/
    CustomModel model
Run Code Online (Sandbox Code Playgroud)

现在我需要在模式UserProfile中创建表public并且CustomModel需要在名为的单独模式中创建表myapp

如何实现这个以及实现这个之后我将来是否需要更改查询或迁移命令中的任何内容?

python django postgresql django-models django-orm

0
推荐指数
1
解决办法
2749
查看次数