在Django中,如何让CreateView仅显示当前用户创建的对象?

未发现

在我的模型中,“食品”领域是许多领域。当前,如果用户要创建新的膳食,则他们要添加的食物选择就是数据库中的每个食物。有没有一种方法可以使创建表单仅允许该选项仅添加当前用户制作的食品?我的ManytoMany所有字段都遇到此问题。

views.py

class MealCreateView(LoginRequiredMixin, CreateView):
    model = Meal
    success_url = '/dashboard/'
    fields = ['name', 'foods']

    def form_valid(self, form):
        form.instance.user = self.request.user
        return super().form_valid(form)

在meal_form.html中

<div class="content-section">
    <form method="POST">
        {% csrf_token %}
        <fieldset class="">
            <legend class="border-bottom mb-4">New Meal</legend>
            {{ form|crispy }}
        </fieldset>
        <div class="">
            <button class="btn btn-outline-info" type="submit">Add Meal</button>
        </div>
    </form>
</div>

在models.py中

class Food(models.Model):
    name = models.CharField(max_length=100, default="")
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    serving_size_g = models.DecimalField(default=100, max_digits=5, decimal_places=1)
    protein = models.DecimalField(default=0, max_digits=5, decimal_places=1)
    total_fats = models.DecimalField(default=0, max_digits=5, decimal_places=1)
    saturated_fats = models.DecimalField(default=0, max_digits=5, decimal_places=1)
    mono_unsaturated_fats = models.DecimalField(default=0, max_digits=5, decimal_places=1)
    poly_unsaturated_fats = models.DecimalField(default=0, max_digits=5, decimal_places=1)
    total_carbohydrates = models.DecimalField(default=0, max_digits=5, decimal_places=1)
    energy = models.DecimalField(default=0, max_digits=5, decimal_places=1)
    sugars = models.DecimalField(default=0, max_digits=5, decimal_places=1)
    fiber = models.DecimalField(default=0, max_digits=5, decimal_places=1)
    calcium = models.DecimalField(default=0, max_digits=5, decimal_places=1)
    iron = models.DecimalField(default=0, max_digits=5, decimal_places=1)
    magnesium = models.DecimalField(default=0, max_digits=5, decimal_places=1)
    potassium = models.DecimalField(default=0, max_digits=5, decimal_places=1)
    sodium = models.DecimalField(default=0, max_digits=5, decimal_places=1)
    vitamin_c = models.DecimalField(default=0, max_digits=5, decimal_places=1)


    class Meta:
        '''Limits the user from making duplicates of food'''
        unique_together = ('name', 'user', 'protein', 'total_fats', 'total_carbohydrates', 'energy', 'sugars', 'fiber', 'calcium', 
                           'iron', 'magnesium', 'potassium', 'sodium', 'vitamin_c', 'saturated_fats', 'mono_unsaturated_fats', 'poly_unsaturated_fats')



class Meal(models.Model):
    name = models.CharField(max_length=20)
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    foods = models.ManyToManyField(Food)

威廉·范昂塞姆

是的,您可以定义一个可以解决ModelForm此问题的方法:

# app/forms.py

from django import forms
from app.models import Food, Meal

class MealForm(forms.ModelForm):

    def __init__(self, *args, user=None, **kwargs):
        super().__init__(*args, **kwargs)
        self.fields['foods'].queryset = Food.objects.filter(user=user)

    class Meta:
        model = Meal
        fields = ['name', 'foods']

现在,在中CreateView,我们可以利用这种形式,并为user参数传递一个值

# app/views.py

from app.forms import MealForm

class MealCreateView(LoginRequiredMixin, CreateView):
    model = Meal
    success_url = '/dashboard/'
    form_class = MealForm
    
    def get_form_kwargs(self):
        kwargs = super().get_form_kwargs()
        kwargs['user'] = self.request.user
        return kwargs

    def form_valid(self, form):
        form.instance.user = self.request.user
        return super().form_valid(form)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Django CreateView中创建对象后,如何添加指令?

来自分类Dev

如何仅使用当前用户的作者(fk)修改我的通用 CreateView 中的作者选择字段?

来自分类Dev

根据当前登录用户在 Django CreateView 中显示不同的默认值?

来自分类Dev

将当前用户传递给Django中的CreateView的初始用户

来自分类Dev

如何仅显示Opencart中当前登录用户的评论?

来自分类Dev

如何在CreateView中获取创建的对象

来自分类Dev

显示与当前用户相关的对象django admin

来自分类Dev

当前用户创建的Django请求对象

来自分类Dev

如何将createview中创建的对象权限传递给django中的updateview

来自分类常见问题

在Django中创建对象时,将当前登录的用户设置为模型中的用户

来自分类Dev

在Django中创建对象时,将当前登录的用户设置为模型中的用户

来自分类Dev

在django vanilla CreateView上设置当前用户

来自分类Dev

从Django管理员创建对象时如何将当前登录的用户附加到对象

来自分类Dev

限制CreateView中的表单字段不将当前用户显示为模板中的选择

来自分类Dev

如何填充ELMAH错误日志以仅显示当前用户会话中的错误?

来自分类Dev

Django CreateView-仅允许创建n个对象。如果达到限制则重定向

来自分类Dev

如何按角色角色仅显示当前用户的组件

来自分类Dev

Android:如何仅显示当前登录用户的数据?

来自分类Dev

如何在Django的CreateView Submit操作中保存当前登录的用户名?

来自分类Dev

如何过滤模型中的对象以仅显示我的ForeignKey用户的对象?

来自分类Dev

Django - 向用户显示与当前 url 对应的对象

来自分类Dev

Django表单:仅显示已登录用户的许多对象

来自分类Dev

如何在 django 中显示特定用户创建的所有用户?

来自分类Dev

如何覆盖 get_queryset 方法以仅显示 django 中多对多字段中包含的对象?

来自分类Dev

如何在方法中创建与当前对象同类的新对象

来自分类Dev

Django表单如何仅显示登录用户?

来自分类Dev

我如何显示数据用户当前在Codeigniter中登录

来自分类Dev

如何使用户能够删除和编辑在Django中创建的对象?

来自分类Dev

如何使用户能够删除和编辑在Django中创建的对象?

Related 相关文章

  1. 1

    在Django CreateView中创建对象后,如何添加指令?

  2. 2

    如何仅使用当前用户的作者(fk)修改我的通用 CreateView 中的作者选择字段?

  3. 3

    根据当前登录用户在 Django CreateView 中显示不同的默认值?

  4. 4

    将当前用户传递给Django中的CreateView的初始用户

  5. 5

    如何仅显示Opencart中当前登录用户的评论?

  6. 6

    如何在CreateView中获取创建的对象

  7. 7

    显示与当前用户相关的对象django admin

  8. 8

    当前用户创建的Django请求对象

  9. 9

    如何将createview中创建的对象权限传递给django中的updateview

  10. 10

    在Django中创建对象时,将当前登录的用户设置为模型中的用户

  11. 11

    在Django中创建对象时,将当前登录的用户设置为模型中的用户

  12. 12

    在django vanilla CreateView上设置当前用户

  13. 13

    从Django管理员创建对象时如何将当前登录的用户附加到对象

  14. 14

    限制CreateView中的表单字段不将当前用户显示为模板中的选择

  15. 15

    如何填充ELMAH错误日志以仅显示当前用户会话中的错误?

  16. 16

    Django CreateView-仅允许创建n个对象。如果达到限制则重定向

  17. 17

    如何按角色角色仅显示当前用户的组件

  18. 18

    Android:如何仅显示当前登录用户的数据?

  19. 19

    如何在Django的CreateView Submit操作中保存当前登录的用户名?

  20. 20

    如何过滤模型中的对象以仅显示我的ForeignKey用户的对象?

  21. 21

    Django - 向用户显示与当前 url 对应的对象

  22. 22

    Django表单:仅显示已登录用户的许多对象

  23. 23

    如何在 django 中显示特定用户创建的所有用户?

  24. 24

    如何覆盖 get_queryset 方法以仅显示 django 中多对多字段中包含的对象?

  25. 25

    如何在方法中创建与当前对象同类的新对象

  26. 26

    Django表单如何仅显示登录用户?

  27. 27

    我如何显示数据用户当前在Codeigniter中登录

  28. 28

    如何使用户能够删除和编辑在Django中创建的对象?

  29. 29

    如何使用户能够删除和编辑在Django中创建的对象?

热门标签

归档