我已经找到了几个在管理页面上执行此操作的解决方案,或者使用基于其他字段的javascript动态过滤,但我似乎无法将这些主题的想法拼凑起来以修复我想要的内容。
我有以下内容:
我想:
代码:
Models.py:
class SunshineUser(AbstractBaseUser):
email = models.EmailField(
verbose_name='email address',
max_length=320,
unique=True
)
USERNAME_FIELD = 'email'
name = models.CharField(max_length=150)
is_active = models.BooleanField(default=True)
is_admin = models.BooleanField(default=False)
REQUIRED_FIELDS = ['name']
objects = SunshineUserManager()
def get_full_name(self):
# The user is identified by their email address
return self.email
def get_short_name(self):
# The user is identified by their name
return self.name
def __str__(self):
return self.email
def has_perm(self, perm, obj=None):
return True
def has_module_perms(self, app_label):
return True
@property
def is_staff(self):
return self.is_admin
class Sunshine(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL)
label = models.CharField(max_length=150)
SUNSHINE_TYPES = (
('R', 'Rain'),
('SH', 'Shine'),
('C', 'Clouds')
)
sunshine_type = models.CharField(max_length=2, choices=METER_TYPES)
POSSIBLE_UNITS = (
('CCF', 'Hundreds of Cubic Feet'),
('GAL', 'Gallons')
)
units = models.CharField(max_length=3, choices=POSSIBLE_UNITS)
def get_full_name(self):
return self.label
def get_short_name(self):
return self.label
def __str__(self):
return self.label
class Ray(models.Model):
sunshine = models.ForeignKey(Sunshine)
ray_amount = models.DecimalField(max_digits=15, decimal_places=5,
validators=[MinValueValidator(0)])
timestamp = models.DateTimeField()
def get_full_name(self):
return self.timestamp
def get_short_name(self):
return self.timestamp
def __str__(self):
return self.timestamp
Views.py:
def addray(request):
"""
processing for addreading
"""
if request.method == "POST":
form = RayCreationForm(request.POST)
if form.is_valid():
form.save()
# redirect, or however you want to get to the main view
return HttpResponseRedirect('/personal/dashboard')
else:
form = RayCreationForm()
#form.sunshine.queryset = Sunshine.objects.filter(user_id=request.user.id)
return render(request, 'personal/addray.html', {'form': form})
Forms.py:
我现在所拥有的只是一个基本形式,因为我在视图中的其他地方尝试了注释掉的行以及其他一些内容,但没有任何效果。
class RayCreationForm(forms.ModelForm):
class Meta:
model = Ray
fields = ['sunshine', 'ray_amount', 'timestamp']
答案 0 :(得分:2)
在其他地方,您可以尝试:
,而不是注释掉的行form.fields['sunshine'].queryset = Sunshine.objects.filter(user_id=request.user.id)
此处共享在ModelChoiceField中过滤初始查询集的其他方法:https://stackoverflow.com/a/5329761/232649