Skip to main content
 首页 » 编程设计

python之django之同一用户不能多次保存模型

2024年10月24日37haluo1

我创建了一个模型来存储轨道信息、mp3、png 和一个 slug 以及与模型关联的用户名。

我可以很好地保存模型,但是当我尝试保存另一个模型时(这样就有两个模型具有相同的用户名),django 告诉我“Track with this User already exists!”

我不想这样,我希望能够为同一用户保存任意数量的模型。

这是我的models.py(我已经在管理面板注册了)

from django.db import models 
from django.core.exceptions import ValidationError 
from django.core.files.images import get_image_dimensions 
from django.contrib.auth.models import User 
 
# Create your models here. 
 
 
class Track(models.Model): 
 
    def generate_user_folder_tracks(instance, filename): 
        return "uploads/users/%s/tracks/%s.mp3" % (instance.user, instance.slug) 
 
    def is_mp3(self): 
        if not self.name.endswith('.mp3'): 
            raise ValidationError(u'You may only upload mp3 files for tracks!') 
 
    def generate_user_folder_art(instance, filename): 
        return "uploads/users/%s/art/%s.png" % (instance.user, instance.slug) 
 
    def is_square_png(self): 
        if not self.name.endswith('.png'): 
            raise ValidationError("You may only upload png files for album art!") 
        else: 
            w, h = get_image_dimensions(self) 
            if not h == w: 
                raise ValidationError("This picture is not square! Your picture must be equally wide as its height.") 
            else: 
                if not (h + w) >= 1000: 
                    raise ValidationError("This picture is too small! The minimum dimensions are 500 by 500 pixels.") 
        return self 
 
 
    # Variables 
 
    track_type_choices = [ 
        ('ORG', 'Original'), 
        ('RMX', 'Remix'), 
        ('CLB', 'Collab'), 
        ('LIV', 'Live'), 
    ] 
 
    # Model Fields 
    user = models.ForeignKey(User, unique=True) 
    title = models.CharField(max_length=100)     
    desc = models.TextField(max_length=7500) 
    track_type = models.CharField(max_length=3, 
                                 choices=track_type_choices, 
                                 default='ORG') 
 
    track_type_content = models.CharField(max_length=100,blank=True) 
    created = models.TimeField(auto_now=True,auto_now_add=False) 
 
    upload = models.FileField(upload_to=generate_user_folder_tracks,validators=[is_mp3]) 
    albumart = models.ImageField(upload_to=generate_user_folder_art,validators=[is_square_png]) 
 
    slug = models.SlugField(max_length=50) 

知道这里发生了什么吗?

请您参考如下方法:

user = models.ForeignKey(User, unique=True) 

unique = true 意味着每个模型都需要有不同的用户。这类似于 Django 的 OneToOne field .

确保你运行

python manage.py makemigrations 

和

python manage.py migrate