问题描述
我制作了简单的日常清洁检查应用程序。该应用程序很简单,用户可以观察某些区域并检查区域是否干净。毕竟,用户需要向批准其日常清洁工作的当局报告。此处的授权者是签发者,检查者和签名者。这里的cln_daily模型代表每天的清洁工作,其中将包含用户模型的制造者,检查者和签名者。
中汇总了 User 模型class User(AbstractUser):
username = models.CharField(max_length=50,unique=True)
email = models.EmailField(_('email address'),unique=True)
phone = models.IntegerField(_('phone number'),unique=True,blank=True,null=True)
>>> print(Group.objects.all())
<QuerySet [<Group: maker>,<Group: checker>,<Group: signer>]>
在另一个名为 cleaning 的应用程序中,我有 cln_daily 模型,该模型根据用户组与该 User 模型具有外键关系。
class cln_daily(models.Model):
.
.
user_maker = models.ForeignKey(User,verbose_name="Maker's Signature",on_delete=models.CASCADE,related_name="makerSignature",null=True,)
user_checker = models.ForeignKey(User,verbose_name="Checker's Signature",related_name="checkerSignature",null=True)
user_signer = models.ForeignKey(User,verbose_name="Signer's Signature",related_name="signerSignature",null=True)
所以我的意思是 user_maker 查询集的用户仅属于组 maker 。 user_checker 的用户仅属于组 checker ,而 user_signer 的查询集的用户仅属于组 signer 。 如何在该 model.py 中表达过滤后的用户模型?
解决方法
我想我对您的问题有所了解,您想以一种简单的方式加入表格,对吗? ,我建议看看this和this
并以这种方式修复这些模型关系,因为到时候就会出现问题:
User
与其在ForeignKeyField
中使用get_user_model()
,不如使用用户class cln_daily(models.Model):
.
.
user_maker = models.ForeignKey('myapp.User',verbose_name="Maker's Signature",on_delete=models.CASCADE,related_name="makerSignature",blank=True,null=True,)
user_checker = models.ForeignKey('myapp.User',verbose_name="Checker's Signature",related_name="checkerSignature",null=True)
user_signer = models.ForeignKey('myapp.User',verbose_name="Signer's Signature",related_name="signerSignature",null=True)
或将此模式用作str(最好是先将其导入代码中):>
import SwiftUI
struct WeekDay {
var dayOfTheWeek: String
var numberOfTheDay: String
var isActual: Bool = false
var isBeforeActual: Bool = false
var isAllCompleted: Bool = false
var isLeftConnected: Bool = false
var isRightConnected: Bool = false
}
struct WeekListView: View {
var week: [WeekDay] = [
WeekDay(dayOfTheWeek: "PO",numberOfTheDay: "10",isBeforeActual: true,isAllCompleted: true,isLeftConnected: false,isRightConnected: true),WeekDay(dayOfTheWeek: "ÚT",numberOfTheDay: "11",isLeftConnected: true,WeekDay(dayOfTheWeek: "ST",numberOfTheDay: "12",isRightConnected: false),WeekDay(dayOfTheWeek: "ČT",numberOfTheDay: "13",isAllCompleted: false,WeekDay(dayOfTheWeek: "PÁ",numberOfTheDay: "14",WeekDay(dayOfTheWeek: "SO",numberOfTheDay: "15",isActual: true,isBeforeActual: false ),WeekDay(dayOfTheWeek: "NE",numberOfTheDay: "16",isBeforeActual: false,]
var body: some View {
HStack {
ForEach(week,id: \.dayOfTheWeek) { weekDay in
Button(action: {
},label: {
VStack {
Text(weekDay.dayOfTheWeek)
.font(.system(size: 12))
.foregroundColor(weekDay.isActual ? Color.white : Color.gray)
Text(weekDay.numberOfTheDay)
.font(.system(size:18))
.fontWeight(.bold)
.foregroundColor(weekDay.isActual ? Color.white : Color.black)
}
.padding(8)
})
.background(
weekDay.isActual
? Color.purple
: weekDay.isBeforeActual
? weekDay.isAllCompleted ? Color.green : Color.red
: Color.white
)
.cornerRadius(
radius: 10.0,corners: !weekDay.isLeftConnected && !weekDay.isRightConnected
? [.topLeft,.bottomLeft,.topRight,.bottomRight]
: weekDay.isLeftConnected && weekDay.isRightConnected
? []
: !weekDay.isLeftConnected
? [.topLeft,.bottomLeft]
: [.topRight,.bottomRight]
)
}
}
}
}
struct CornerRadiusStyle: ViewModifier {
var radius: CGFloat
var corners: UIRectCorner
struct CornerRadiusShape: Shape {
var radius = CGFloat.infinity
var corners = UIRectCorner.allCorners
func path(in rect: CGRect) -> Path {
let path = UIBezierPath(roundedRect: rect,byRoundingCorners: corners,cornerRadii: CGSize(width: radius,height: radius))
return Path(path.cgPath)
}
}
func body(content: Content) -> some View {
content
.clipShape(CornerRadiusShape(radius: radius,corners: corners))
}
}
extension View {
func cornerRadius(radius: CGFloat,corners: UIRectCorner) -> some View {
ModifiedContent(content: self,modifier: CornerRadiusStyle(radius: radius,corners: corners))
}
}
struct WeekListView_Previews: PreviewProvider {
static var previews: some View {
WeekListView()
}
}
因为如果您是django的新手,那么及时地迁移可能是迁移问题
,经过长时间搜索。我通过解决形式欺骗了它
class MCSForm(forms.ModelForm):
class Meta:
model = cln_daily
fields = ("__all__")
def __init__(self,*args,**kwargs):
super().__init__(*args,**kwargs)
self.fields['user_maker'].queryset = User.objects.filter(groups__name='maker')
self.fields['user_checker'].queryset = User.objects.filter(groups__name='checker')
self.fields['user_signer'].queryset = User.objects.filter(groups__name='signer')
,
我有更好的答案,而不是用形式欺骗他们。在FKField中使用 limit_choices_to
User = get_user_model()
class cln_daily(models.Model):
.
.
user_maker = models.ForeignKey(User,limit_choices_to={'groups__name':'maker'})
user_checker = models.ForeignKey(User,limit_choices_to={'groups__name':'checker'})
user_signer = models.ForeignKey(User,limit_choices_to={'groups__name':'signer'})