如何从另一个模型中的django用户获取特定用户
how to get specific users from django user in another model
我有一个名为 UserTypes 的模型,在这个模型中我使用 User 作为 OneToOne 字段并且 UserTypes 模型与 用户 模型。我创建这个模型是为了给用户一个状态,就像我们做的那样 is_staff=True。
现在我想在另一个名为 Order 的模型中显示 staff_status = "Delivery Boy" 的所有用户,该模型位于同一项目
的另一个应用程序中
model.py(app1)
class UserTypes(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
staff_choices = (
('', ''),
('Admin', 'Admin'),
('Chef', 'Chef'),
('Delivery Boy', 'Delivery Boy'),
)
staff_status = models.CharField(max_length=15, choices=staff_choices, default=staff_choices[0][0])
def __str__(self):
return self.staff_status
model.py(app2)
class Order(models.Model):
name = models.CharField(max_length=60)
email = models.EmailField(max_length=60,default=None, blank=True)
mobile_no = models.CharField(max_length=13, default=None)
address = models.CharField(max_length=150)
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
status_choices = (
('In Queue', 'In Queue'),
('Processing', 'Processing'),
('Ready', 'Ready'),
('Delivered', 'Delivered'),
('Paid', 'Paid'),
('Cancelled', 'Cancelled'),
)
status = models.CharField(max_length=15, choices=status_choices,
default=status_choices[0][0])
total = models.DecimalField(max_digits=10, decimal_places=2,default=0)
class Meta:
ordering = ('created', )
def __str__(self):
return 'Order {}'.format(self.id)
def get_total(self):
return sum(item.get_cost() for item in self.items.all())
在 app2 models.py 文件中添加一个字段来存储订单中的用户类型 table:
from app1.models import UserTypes
user = models.OneToOneField(UserTypes, on_delete=models.CASCADE)
将此代码添加到您的 app2 的 admin.py 文件中:
from app1.models import UserTypes
from .models import Order
class OrderAdmin(admin.ModelAdmin):
def get_form(self, request, obj=None, **kwargs):
form = super(OrderAdmin,self).get_form(request, obj,**kwargs)
# form class is created per request by modelform_factory function
# so it's safe to modify
# we modify the the queryset
form.base_fields['user'].queryset =
form.base_fields['user'].queryset.filter(staff_choices='Delivery Boy')
return form
admin.site.register(Order, OrderAdmin)
我有一个名为 UserTypes 的模型,在这个模型中我使用 User 作为 OneToOne 字段并且 UserTypes 模型与 用户 模型。我创建这个模型是为了给用户一个状态,就像我们做的那样 is_staff=True。 现在我想在另一个名为 Order 的模型中显示 staff_status = "Delivery Boy" 的所有用户,该模型位于同一项目
的另一个应用程序中model.py(app1)
class UserTypes(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
staff_choices = (
('', ''),
('Admin', 'Admin'),
('Chef', 'Chef'),
('Delivery Boy', 'Delivery Boy'),
)
staff_status = models.CharField(max_length=15, choices=staff_choices, default=staff_choices[0][0])
def __str__(self):
return self.staff_status
model.py(app2)
class Order(models.Model):
name = models.CharField(max_length=60)
email = models.EmailField(max_length=60,default=None, blank=True)
mobile_no = models.CharField(max_length=13, default=None)
address = models.CharField(max_length=150)
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
status_choices = (
('In Queue', 'In Queue'),
('Processing', 'Processing'),
('Ready', 'Ready'),
('Delivered', 'Delivered'),
('Paid', 'Paid'),
('Cancelled', 'Cancelled'),
)
status = models.CharField(max_length=15, choices=status_choices,
default=status_choices[0][0])
total = models.DecimalField(max_digits=10, decimal_places=2,default=0)
class Meta:
ordering = ('created', )
def __str__(self):
return 'Order {}'.format(self.id)
def get_total(self):
return sum(item.get_cost() for item in self.items.all())
在 app2 models.py 文件中添加一个字段来存储订单中的用户类型 table:
from app1.models import UserTypes
user = models.OneToOneField(UserTypes, on_delete=models.CASCADE)
将此代码添加到您的 app2 的 admin.py 文件中:
from app1.models import UserTypes
from .models import Order
class OrderAdmin(admin.ModelAdmin):
def get_form(self, request, obj=None, **kwargs):
form = super(OrderAdmin,self).get_form(request, obj,**kwargs)
# form class is created per request by modelform_factory function
# so it's safe to modify
# we modify the the queryset
form.base_fields['user'].queryset =
form.base_fields['user'].queryset.filter(staff_choices='Delivery Boy')
return form
admin.site.register(Order, OrderAdmin)