【问题标题】:How to make form.cleaned_data[] with m2m field, string + manytomanyfield?- Django如何使用 m2m 字段、字符串 + manytomanyfield 制作 form.cleaned_data[]?- Django
【发布时间】:2018-12-07 00:30:49
【问题描述】:

我把老师的 CharField 改成了 ManyToManyField,现在我的 UserMessage 和 EmailMessage 坏了,

型号如下:

class UserMessage(models.Model):
    user = models.ManyToManyField(User,related_name="recipent")
    send_user = models.ForeignKey(Use,null=True, blank=True, on_delete=models.SET_NULL, related_name="sender")
    message = models.CharField(max_length=500)
    test_name =models.CharField(max_length=800, default='', blank=True)
    test_date = models.DateField(default=datetime.now)
    test_time = models.TimeField(default=datetime.now)

    `# when teacher is not ManyToManyField, the EmailMessage of body works well with test.teacher.user`
    teacher = models.ManyToManyField(User, related_name="+") 

test.teacher.username是CharField,如何定义ManyToManyField?

body="Name of test:" + test.name  + ",Date :" + str(test.date) + ",Time:" + str(test.time) + ", Teachers:" + test.teacher.username

UserMessage 的部分views.py 如下(不是完整代码),UserMessage 的功能很好,但我想知道如何将form.cleaned_data['teacher'].username 更改为ManyToManyFiled?我的意思是不是form.cleaned_data['teacher.set()'] 或其他任何东西,非常感谢您的任何建议。

user_message.test_name = form.cleaned_data['name']
user_message.teacher = form.cleaned_data['teacher'].username
user_message.test_time = form.cleaned_data['time']
user_message.test_date = form.cleaned_data['date']

【问题讨论】:

    标签: django forms sendmessage manytomanyfield m2m


    【解决方案1】:

    当你想设置外键时,你必须分配一个用户实例,而不是它的一个字段。假设教师是一个用户对象,您可以使用类似

    for user_teacher in form.cleaned_data['teacher']:
        user_message.teacher.add(user_teacher)
    

    如果您没有传递用户实例(但只说用户名),您将不得不以某种方式选择相关教师,然后添加 m2m 关系,例如

    user_teacher = get_object_or_404(get_user_model(), username=form.cleaned_data['teacher'])
    user_message.teacher.add(user_teacher)
    

    假设您的用户名是唯一的,这将起作用。

    【讨论】:

    • 嗨,关于UserMessage,我已经假设老师是user_message1.user.add(teacher)的用户对象,我只粘贴了views.py的部分代码,程序运行良好,我只是不知道如何定义m2m form.cleaned_data['teacher'] 的字段,不是 form.cleaned_data['teacher.set()'] 或 form.cleaned_data['teachers'],我被困在这里面了。
    • 假设您有某种模板,您可以在其中实际选择一位或多位教师 form.cleaned_data['teacher'] 本身就是一个集合。所以你可以迭代它,例如用于 form.cleaned_data['teacher'] 中的 user_teacher
    • 消息需要发送给许多学生和许多老师,请给我一些关于迭代它的示例,非常感谢
    猜你喜欢
    • 2020-11-22
    • 2012-11-05
    • 2013-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-10
    相关资源
    最近更新 更多