【问题标题】:Custom save method with condition in django modeldjango模型中带有条件的自定义保存方法
【发布时间】:2023-03-10 07:35:01
【问题描述】:

我正在尝试做一个 django 项目,用户可以使用一个或多个标签来描述图片,只要多个用户为同一张图片输入相同的标签,这个词或标签应该保存到标签表。

我想我可以通过向 Tag 模型添加自定义保存方法来解决这个问题。这是正确的方法还是我会在视图中编写这个逻辑?

class Tag(models.Model):
    LANGUAGES = (('en', 'english'),
                 ('de', 'deutsch'),
                 ('fr', 'francais')
                 )
    name = models.CharField(max_length=256)
    language = models.CharField(max_length=256, choices=LANGUAGES)

class Tagging(models.Model):
    user = models.ForeignKey(User, on_delete=models.SET_NULL, null=True)
    gameround = models.ForeignKey(Gameround, on_delete=models.CASCADE, blank=True, default='')
    picture = models.ForeignKey(Pictures, on_delete=models.CASCADE, related_name='taggings', default='')
    tag = models.ForeignKey(Tag, on_delete=models.CASCADE)
    created = models.DateTimeField(editable=False)
    score = models.PositiveIntegerField(default=0)

【问题讨论】:

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


    【解决方案1】:

    如果我对您的理解正确,您希望在新的 Tagging 对象包含已经存在于现有 Tagging 对象中的标签时添加 Tag 模型的新实例(即之前已由其他用户提交)。

    在处理标记对象的数据时,我会在视图函数中执行此操作。每当用户提交新标签(标签)时,检查每个标签是否已经在数据库中exists。如果是,请创建 Tag 模型的新实例并使用适当的数据填充它。

    user_tag = "value of the new tag"
    
    if Tagging.objects.filter(tag=user_tag).exists():
        new_tag = Tag()
        new_tag.name = user_tag
        # set other fields
        new_tag.save()
    

    【讨论】:

    • 谢谢!这当然有帮助。我将如何允许用户输入?这样我就可以将 user_tag 作为参数传递给视图方法等?
    • 哦,我假设您已经拥有某种前端(位于用户浏览器中的应用程序部分)。最简单的方法是使用一个简单的 HTML 页面,该页面显示图片并具有供用户输入的表单。然后,您可以在提交表单时使用 POST 请求检索该输入。更复杂的方法是使用 Django 模板或 Javascript 框架,如 React。如果这些概念对您来说都是全新的,您可以考虑在线课程。我可以推荐CS50的网络编程课程(cs50.harvard.edu/web/2020)。
    猜你喜欢
    • 2019-10-18
    • 1970-01-01
    • 2010-10-31
    • 1970-01-01
    • 2020-08-24
    • 1970-01-01
    • 1970-01-01
    • 2013-04-18
    • 2014-07-11
    相关资源
    最近更新 更多